PIC assembler
I started getting into reading PIC manuals looking into the anatomy of the PICAXE, and then thought about using a PIC12F683 in an application too fast for a PICAXE, basically a frequency-controlled square wave back-shifter which back-shifts a square-wave up to 8kHz depending on its frequency itself.
I first used non-microcontroller components to try and accomplish this, but then I thought I could program a Pic12f instead, which would be a 3rd of the size. I started looking at the assembler instruction set, which is when I started programming assembler in PE. It took time finding out all the registers which need to be initialised, but it was worth it.
Once I brought a Bas800 pic programmer, some PIC12F683 ICs and 20MHz oscillators, I started off slowly with a button controlled LED flashing program which worked perfectly second time after realising CLRWDT is required to pat (reset) the watchDOG timer, which is useful in case the PIC crashes when it will reset it and get it working again.
Next, I invented and tested a robust bitbang-serin and serout assembler code snippets, and used them in a serial computer control terminal program where a computer sends serial commands to the PIC to modify PIC variables, which took time but worked very well. Then I looked into the EEPROM registers in the datasheet and found out how to read from and write to the EEPROM to save the serial modifiable variables to.
Finally, I decided on which perhipherals to use, which was the CCP in compare mode, with its output as the output of the square-wave shifter, and Timer1 with gate control, where the gate is the input of the square wave shifter, which triggers the CCP output and measures the period of the incoming square wave. I then developed the calculation routine which is determined by the serial-adjustable variables.
Once two of them, both clocked by one standalone 20MHz oscillator, are inline with a brushless motor commutation circuit, they are of real benefit to the speed and efficiency of an optical-sensored syncronously-commutated stepper motor.
I hope this gives you an idea of the PIC assembler route. The PIC12F683 is actually a very powerful 8-pin PIC.
PS if you want the EC osc functionality, there was a bug in the Picdef.ini setup which prevents EC-osc from being selected in the PIC programmer, even when the PIC selected supports it. I have attached this as a txt. In \Program files\programming editor\picprog, remame the existing picdef.ini to picdef_o.ini, open the picdef.txt attachment in notepad, and save to the \picprog folder as 'picdef.ini'. In here, I just simply copied each 'EXTCLK' directives, renaming each copy as 'EC'. The programmer recognises EC, but not EXTCLK. It should say it is modified by TCD.
One catch though is it still doesn't allow PE to program the EC bit, so I have to open the PIC Programmer software after I have programmed the IC using PE, load the HEX file, select the EC button, uncheck the program and data boxes, leaving the configuration box checked, and program this configuration.
EDIT: the assembler templates (file - new - template) help a lot in starting an assembler program.
I hope this makes sense.
PSS the assembler complier doesn't like filenames including their paths longer than 63 characters, or, another problem I've encountered, filenames with dashes in them.
Definitions like PORTA are case sensitive. Also see
http://www.picaxeforum.co.uk/showthread.php?t=11572&highlight=mpasm for more information, and the manual, on assembler code. I hope you find this useful.