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;
|