#define PORTA 5 #define PORTB 6 #pragma RS232_TXPORT 5 #pragma RS232_RXPORT 5 #pragma RS232_TXPIN 2 #pragma RS232_RXPIN 0 //not really,,,, #pragma RS232_BAUD 2400 #pragma TRUE_RS232 1 //Timing settings #define TRUE 1 #define FALSE 0 #pragma TURBO_MODE TRUE #pragma CLOCK_FREQ 50000000 //#pragma CLOCK_FREQ 4000000 //port b, all inputs for bits. //port a0=output, step motor //port a1=input, data ready //port a2=output, RS-232. //port a3=input, switch #define P_READAVAIL 0 #define P_ADVANCE_TAPE 1 #define P_SWITCH 3 #define P_RS232 2 char thechar; int valid_data; void reset_advance(void); void do_advance(void); void check_switch(void); void init (void); void drop_motor(void); void my_putchar (char); void raise_motor(void); void main( void ) { init(); check_switch(); drop_motor(); while (TRUE==TRUE) { while (input_pin_port_a(P_READAVAIL)==0); thechar=input_port_b(); raise_motor(); while (input_pin_port_a(P_READAVAIL)==1); my_putchar(~thechar); check_switch(); drop_motor(); } } void drop_motor(void) { output_low_port_a(P_ADVANCE_TAPE) ; } void raise_motor(void) { output_high_port_a(P_ADVANCE_TAPE) ; } void reset_advance (void) { output_low_port_a(P_ADVANCE_TAPE) ; delay_us (10); output_high_port_a(P_ADVANCE_TAPE) ; return; } void do_advance(void) { output_low_port_a(P_ADVANCE_TAPE) ; delay_us (10); //output_high_port_a(P_ADVANCE_TAPE) ; return; } void check_switch(void) { while ( input_pin_port_a( P_SWITCH )==1 ); return; } void init (void) { output_port_a(11111111b); asm mov M,#00001111b ;the direction asm mov W,#11111001b asm mov !RA,W asm mov W,#$FF asm mov !RB,W asm mov M,#$0E ;the MODE pullup registers asm mov W, #$00 asm mov !RB,W ;all B pulled up. asm mov W, #$00 asm mov !RA,W ;all A pulled up. asm mov M,#$0d ;the MODE pullup registers asm mov W, #$00 asm mov !RB,W ;all Schmidt asm mov W, #$00 asm mov !RA,W ;all Schmidt asm mov M,#$0D ;B is TTL,all others CMOS asm mov W,#$00 asm mov !RB,W } void my_putchar(char x) { char ct=0; char odd_even=0; output_low_port_a(P_RS232) ; delay_ms(3); delay_us(200); delay_us(100); while (ct<8) { if ((x&00000001b)==TRUE) { output_high_port_a(P_RS232); odd_even++; } else { output_low_port_a(P_RS232); } x=x>>1; ct++; delay_ms(3); delay_us(200); delay_us(100); } if ((odd_even&00000001b)==TRUE) { output_high_port_a(P_RS232); } else { output_low_port_a(P_RS232); } delay_ms(3); delay_us(200); delay_us(100); output_high_port_a(P_RS232); delay_ms(3); delay_us(200); delay_us(100); }P6Y