📄 xxx.lst
字号:
C51 COMPILER V6.12 XXX 08/17/2007 13:03:45 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE XXX
OBJECT MODULE PLACED IN .\xxx.OBJ
COMPILER INVOKED BY: C:\Keil612\C51\BIN\C51.EXE .\xxx.c DEBUG OBJECTEXTEND SRC(.\xxx.SRC)
stmt level source
1 #include <AT89X51.H>
2
3 unsigned int disp[10] = {0x3f,0x30,0x6d,0x79,0x72,0x5b,0x5f,0x31,0x7f,0x7b};
4 //0, 1, 2 3 4 5 6 7 8 9
5 unsigned char i,j,k,ge,shi,hong;
6
7 void displed() //主程序温度显示函数
8 {
9 1 ge=hong%10;
10 1 shi=hong/10;
11 1 P0=disp[ge];
12 1 P2=0x40;
13 1 for(i=0; i<10; i++) //延时部分
14 1 for(j=0; j<100; j++)
15 1 {;}
16 1 //P2=0;
17 1 P0=disp[shi];
18 1 P2=0x80;
19 1 for(i=0; i<10; i++) //延时部分
20 1 for(j=0; j<100; j++)
21 1 {;}
22 1 }
23
24 main()
25 {
26 1
27 1 EA =1;
28 1 IT0 =1;
29 1 EX0=1 ;
30 1
31 1
32 1 while(1)
33 1 {
34 2 // hong=P1;
35 2 displed();
36 2 }
37 1 }
38
39 ////////////////////把接受并转换好的二进制码存入入P1中/////////////////////
40
41 void int0_int(void) interrupt 0
42 {
43 1 #pragma asm
44 1 jmp xxx
45 1 YS1: MOV R4,#20 ;延时子程序1,精确延时882微秒
46 1 D1: MOV R5,#20
47 1 DJNZ R5,$
48 1 DJNZ R4,D1
49 1 RET
50 1 YS2: MOV R4,#10 ;延时子程序2,精确延时4740微秒
51 1 D2: MOV R5,#235
52 1 DJNZ R5,$
53 1 DJNZ R4,D2
54 1 RET
55 1 YS3: MOV R4,#2;延时程序3,精确延时1000微秒
C51 COMPILER V6.12 XXX 08/17/2007 13:03:45 PAGE 2
56 1 D3:MOV R5,#248
57 1 DJNZ R5,$
58 1 DJNZ R4,D3
59 1 RET
60 1 xxx:
61 1 CLR EA ;暂时关闭CPU的所有中断请求
62 1 MOV R6,#10
63 1 SB: ACALL YS1;调用882微秒延时子程序
64 1 JB P3.2,EXIT;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
65 1 DJNZ R6, SB;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
66 1 ;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
67 1 JNB P3.2, $ ;等待高电平避开9毫秒低电平引导脉冲
68 1 ACALL YS2 ;延时4.74毫秒避开4.5毫秒的结果码
69 1
70 1 MOV R7,#26;忽略前26位系统识别码
71 1
72 1 JJJJA:JNB P3.2,$;等待地址码第一位的高电平信号
73 1 LCALL YS1;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
74 1 MOV C,P3.2;将P3.2引脚此时的电平状态0或1存入C中
75 1 JNC UUUA;如果为0就跳转到UUUA
76 1 LCALL YS3;检测到高电平1的话延时1毫秒等待脉冲高电平结束
77 1 UUUA: DJNZ R7,JJJJA
78 1
79 1 MOV R1,#1AH ;设定1AH为起始RAM区
80 1 MOV R2,#2;接收从1AH到1BH的2个内存,用于存放操作码和操作反码
81 1 PP: MOV R3,#8;每组数据为8位
82 1
83 1 JJJJ: JNB P3.2,$;等待地址码第一位的高电平信号
84 1 LCALL YS1;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
85 1 MOV C,P3.2;将P3.2引脚此时的电平状态0或1存入C中
86 1 JNC UUU;如果为0就跳转到UUU
87 1 LCALL YS3;检测到高电平1的话延时1毫秒等待脉冲高电平结束
88 1 UUU: MOV A,@R1;将R1中地址的给A
89 1 RRC A;将C中的值0或1移入A中的最低位
90 1 MOV @R1,A;将A中的数暂时存放在R1数值的内存中
91 1 DJNZ R3,JJJJ;接收满8位换一个内存
92 1 INC R1;对R1中的值加1,换下一个RAM
93 1 DJNZ R2,PP ;接收完8位数据码和8位数据反码,存放在1AH/1BH中
94 1
95 1 MOV A,1AH
96 1 CPL A;对1AH取反后和1BH比较
97 1 CJNE A,1BH,EXIT;如果不等表示接收数据发生错误,放弃
98 1
99 1 MOV hong,1AH;将按键的键值通过P1口的8个LED显示出来!
100 1 //SETB P3.5;蜂鸣器鸣响-嘀嘀嘀-的声音,表示解码成功
101 1 LCALL YS2
102 1 LCALL YS2
103 1 LCALL YS2
104 1 //CLR P3.5;蜂鸣器停止
105 1 EXIT: SETB EA ;允许中断
106 1 //RETI ;退出解码子程序
107 1
108 1
109 1 #pragma endasm
110 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 295 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V6.12 XXX 08/17/2007 13:03:45 PAGE 3
DATA SIZE = 26 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -