.nolist .include "s1200def.inc" .list ; ; Define all registers here ; ; Analog stuff ; .def AD_L = R0 ; results (could be low registers) .def AD_H = R1 .def AD_Sreg = R2 ; Low, Timer Interrupt flag storage .def AT_Sreg = R3 ; low, Analog interrupt flag storage .def AD_Flag = R16 ; High, conversion flags ; ; Usart stuff ; .def bitcnt = R17 ; bit counter .def Txbyte = R18 ; Data to be transmitted .def Rxbyte = R19 ; Received data .def U_Flag = R20 ; .def temp = R21 ; General purpose = used in interrupt & Delays ; ; Main Routine Stuff ; .def TCR_Ini = R22 ; Timer/Counter controll (prescale) .def HTA_H = R31 ; Passed Parameters for Hex to Ascii .def HTA_L = R30 ; ; Enable interrupts. ; .set MCUCR_INIT=MCUCR_INIT | (1<' rcall putchar rcall getecho cpi RxByte, 'r' ; do right conversion brne m1 rcall AD0_Conv sbrc AD_Flag, AD_Err ; if err... rjmp mErr rcall seperator mov HTA_H, AD_H mov HTA_L, AD_L rcall HexToAscii rjmp mx m1: cpi RxByte, 'l' ; do left conversion brne m2 rcall AD1_Conv sbrc AD_Flag, AD_Err ; if err... rjmp mErr rcall seperator mov HTA_H, AD_H mov HTA_L, AD_L rcall HexToAscii rjmp mx m2: cpi RxByte, 'p' ; change prescale brne m4 rcall getecho ; single hex digit subi RxByte, '0' cpi RxByte, 8 brge merr m21: mov TCR_Ini, RxByte rjmp mx m4: cpi RxByte, 'q' ; Query prescale brne m5 rcall seperator mov TxByte, TCR_Ini rcall puthex rjmp mx m5: cpi RxByte, '0' ; Enable right eye brne m6 Enable REYE Disable LEYE rjmp mx m6: cpi RxByte, '1' ; enable left eye brne m7 Enable LEYE Disable REYE rjmp mx m7: cpi RxByte, 'x' ; disable both eye's brne m8 Disable LEYE Disable REYE rjmp mx m8: cpi RxByte, 't' ; test out hextoascii brne m9 inc HTA_L brne m8a inc HTA_H m8a: rcall HexToAscii rjmp mx m9: cpi RxByte, 'i' ; Set to input (measure) brne m10 cbi ADDDR, CAP rjmp mx m10: cpi RxByte, 'o' ; Set to output (discharge) brne m11 sbi ADDDR, CAP rjmp mx m11: merr: rcall seperator ldi TxByte, '?' ; Say we didn't understand rcall putchar mx: rjmp forever ; continue PrintBanner: ldi TxByte, 'E' rcall putchar ldi TxByte, 'y' rcall putchar ldi TxByte, 'e' rcall putchar ldi TxByte, ' ' rcall putchar ldi TxByte, 'T' rcall putchar ldi TxByte, 'e' rcall putchar ldi TxByte, 's' rcall putchar ldi TxByte, 't' rcall putchar ldi TxByte, ' ' rcall putchar ldi TxByte, 'B' rcall putchar ldi TxByte, 'e' rcall putchar ldi TxByte, 'n' rcall putchar ldi TxByte, 'c' rcall putchar ldi TxByte, 'h' rcall putchar ldi TxByte, 0x0D rcall putchar ret ; ; R30 and R31 make a 16 bit number. ; ; Convert and spit out as ascii hex ; HexToAscii: mov TxByte, HTA_H swap TxByte rcall puthex mov TxByte, HTA_H rcall puthex mov TxByte, HTA_L swap TxByte rcall puthex mov TxByte, HTA_L ; rcall puthex ; ret puthex: andi TxByte, 0x0F subi TxByte, -'0' ; Addi '0' cpi TxByte, ('9' + 1) ; if > '9' brlt puth1 ; subi '9' and add 'A' subi TxByte, ('9' + 1 - 'A') puth1: rjmp putchar seperator: ldi TxByte, ' ' rcall putchar ldi TxByte, '-' rcall putchar ldi TxByte, ' ' rjmp putchar GetEcho: rcall getchar mov TxByte, RxByte rjmp putchar