ORG 0000H;
AJMP READY; //短轉移
ORG 000BH; //定時器0中斷入口
AJMP EXT0;
ORG 0030H;
READY:MOV TMOD,#00010001B; //設置寄存器初始化
MOV IE,#10000010B; //允許中斷總控與定時器0中斷
AGAIN:MOV DPTR,#TABLE; //DRTR指向字形碼表首址
MAINL:CLR A; //清0
MOVC A, @A+DPTR; //取地址值
MOV R1,A;
INC DPTR; //地址加一
CLR A;
MOVC A,@A+DPTR;
MOV R0,A ;
INC DPTR;
ORL A,R1; //或
JZ XZF; //A=0轉移
MOV A,R0;
ANL A,R1; //與
CJNE A,#0FFH,START; //比較轉移
AJMP AGAIN;
START:MOV TL0,R0; //將R0,R1分別放入TL0與TH0寄存器
MOV TH0,R1;
SETB TR0;
CLR A;
MOVC A,@A+DPTR;
MOV R2,A;
INC DPTR;
AJMP DELAY;
XZF:CLR TR0;
CLR A;
MOVC A,@A+DPTR;
MOV R2,A;
INC DPTR;
DELAY:ACALL YS187MS; //調用子程序
DJNZ R2 ,DELAY; //減一不為0轉移
AJMP MAINL;
EXT0:MOV TL0,R0;
MOV TH0,R1;
CPL P1.0; //P1.0引腳輸出取反
RETI;
YS187MS:SETB TR1;
MOV R5,#100;
YSLOOP:MOV TL1,#LOW(65536-1870);//取低八位
MOV TH1,#HIGH(65536-1870); //取高八位
YSPD:JBC TF1,YSLOOP1; //TF1為1跳轉為0執行下一條
AJMP YSPD;
YSLOOP1:DJNZ R5,YSLOOP;
CLR TR1;
RET; //子程序返回
TABLE:DB 0FDH,80H,03H,0FDH,80H,01H; //字形碼表
DB 0FDH,0C6H,04H,0FDH,80H,04H;
DB 0FEH,2AH,04H,0FEH,02H,04H;
DB 00H,00H,04H;
DB 0FDH,80H,03H,0FDH,80H,01H;
DB 0FDH,0C6H,04H,0FDH,80H,04H;
DB 0FEH,5CH,04H,0FEH,2AH,04H;
DB 00H,00H,04H;
DB 0FDH,80H,03H,0FDH,80H,01H;
DB 0FEH,0C0H,04H,0FEH,84H,04H;
DB 0FEH,2AH,04H,0FEH,02H,04H;
DB 0FDH,0C6H,04H;
DB 0FFH,98H,03H,0FEH,98H,01H;
DB 0FEH,84H,04H,0FEH,2AH,04H;
DB 0FEH,5CH,04H,0FEH,2AH,04H;
DB 00H,00H,04H;
DB 0FFH,0FFH;
END;
|