📄 rs232_def.lst
字号:
C51 COMPILER V7.06 RS232_DEF 11/17/2007 20:50:58 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE RS232_DEF
OBJECT MODULE PLACED IN C:\VW\MY_PRO~1\CAN_PR~1\LAB2\RS232_DEF.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE C:\VW\MY_PRO~1\CAN_PR~1\LAB2\RS232_DEF.C DB SB OE
stmt level source
1 /*
2 *本程序主要功能:数码管上显示计数,485总线实时连接这两个模块使显示同步
3 *485总线是半双工的
4 *本程序采用硬件波特率19200(Baud2:Baud0)= 001
5 *INT0按键为计数复位按键*
6 *T1按键为计数按键*
7 */
8
9 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
10 //描述:
11 // 该程序INT0按键程序+显示程序+RS232通讯 &
12 // 通讯波特率:19200 &
13 // 每次收发一个字节 &
14
15 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
16 //【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! &
17 //【声明】 作者: PIAE小组 &
18
19 #include <reg52.h>
20 #include <intrins.h>
21 #include <RS232_def.h>
*** WARNING C318 IN LINE 21 OF C:\VW\MY_PRO~1\CAN_PR~1\LAB2\RS232_DEF.C: can't open file 'RS232_def.h'
22
23
24 void INT0_Counter( void ) interrupt 0 using 1
25 {//INT0按键为计数按键
26 1 EA = 0;
27 1 Show_Data++; //计数单元加1
*** ERROR C202 IN LINE 27 OF C:\VW\MY_PRO~1\CAN_PR~1\LAB2\RS232_DEF.C: 'Show_Data': undefined identifier
28 1 TXD_flag = 1;//置要发送标志位
*** ERROR C202 IN LINE 28 OF C:\VW\MY_PRO~1\CAN_PR~1\LAB2\RS232_DEF.C: 'TXD_flag': undefined identifier
29 1 EA = 1;
30 1 }
31
32
33 void RS232_RXD( void ) interrupt 4 using 1
34 {//接收数据函数,在中断服务程序中调用
35 1 EA = 0;//关闭所有中断
36 1 ES = 0;//关闭串口
37 1 if(RI==1)
38 1 {
39 2 RI = 0;
40 2 RX_data = SBUF;
*** ERROR C202 IN LINE 40 OF C:\VW\MY_PRO~1\CAN_PR~1\LAB2\RS232_DEF.C: 'RX_data': undefined identifier
41 2 RXD_flag = 1;//置接收到数据标志
*** ERROR C202 IN LINE 41 OF C:\VW\MY_PRO~1\CAN_PR~1\LAB2\RS232_DEF.C: 'RXD_flag': undefined identifier
42 2 }
43 1 _nop_();
44 1 ES = 1;//打开串口
45 1 EA = 1;//打开中断
46 1 }
47 //*******************************************************
48
49 void main(void)
50 {
C51 COMPILER V7.06 RS232_DEF 11/17/2007 20:50:58 PAGE 2
51 1 CPU_init();
52 1 _nop_();
53 1 while(1)
54 1 {
55 2 NOPS;
56 2 //////////////////////// 接收处理程序/////////////////////////////////
57 2 if( RXD_flag )
58 2 {
59 3 EA = 0;//关闭CPU中断
60 3 LED_RED = !LED_RED;//指示灯状态变化
61 3 RXD_flag = 0;//清除标志
62 3 Show_Data = RX_data;//接收对方发送的数据
63 3 EA = 1;
64 3 }
65 2 ///////////////////////发送处理程序/////////////////////////////////
66 2 if( TXD_flag )
67 2 {
68 3 EA = 0;
69 3 LED_GRE = !LED_GRE;//指示灯状态变化
70 3 TXD_flag = 0;
71 3 TX_data = Show_Data;//给发送的数据赋值
72 3 RS232_TXD();
73 3 _nop_();
74 3 EA = 1;
75 3 }
76 2 ///////////////////////数码管显示程序/////////////////////////////////
77 2 led_seg7(1,Show_Data);
78 2 ///////////////////////数码管显示程序/////////////////////////////////
79 2 }//while 结束
80 1 }//main结束
81
82
83 void Delay(uchar delay_time)
84 {//延时程序
85 1 while(delay_time--)
86 1 {}
87 1 }
88
89
90 void CPU_init(void)
91 {//初始化CPU
92 1 SCON = 0x50; //串口方式1
93 1 PCON = 0x80; //串口波特率加速
94 1 TMOD = 0x21;
95 1 TH1=0xFD; //19200bps
96 1 TL1=0xFD;
97 1 TR1 = 1;
98 1 TI = 0;
99 1 RI = 0;
100 1 PS = 1; //串口中断的优先级设为最高
101 1
102 1 IT0 = 1;//外部中断0负边沿触发
103 1 EX0 = 1;//打开外部中断0
104 1
105 1 ES = 1;//打开串口中断
106 1 EA = 1; //打开总中断
107 1 SJA1000_CS = 1;//片选无效
108 1 }
109
110 void RS232_TXD( void )
111 {
112 1 EA = 0;//关闭所有中断
C51 COMPILER V7.06 RS232_DEF 11/17/2007 20:50:58 PAGE 3
113 1 ES = 0;//关闭串口中断,采用查询发送方式
114 1 TI = 1;
115 1 while(TI)
116 1 {
117 2 TI = 0;//一字节发送完后清除标志位
118 2 SBUF = TX_data;
119 2 while(!TI)
120 2 {}//等待发送
121 2 TI = 0;
122 2 }
123 1 _nop_();
124 1 ES = 1;//打开串口中断
125 1 EA = 1;//打开中断
126 1 }
127
128 void led_seg7(uchar from,uchar number)
129 {//from(1_4):数码管显示起始位置(从右到左),number:显示的数
130 1 uchar digit,temp_l;
131 1 uchar temp_h=0x7f;
132 1 temp_h = _cror_(temp_h,from-1); //确定从哪一位开始显示,即确定高四位
133 1 temp_h = temp_h & 0xf0; //取高四位
134 1 temp_l = P2 & 0x0f; //取P2的低四位
135 1 P2 = temp_h | temp_l; //设定P2口
136 1
137 1 if(number==0)
138 1 P0 = led[0];
139 1 else
140 1 {
141 2 while(number)
142 2 {
143 3 digit = number%10 ;
144 3 number /= 10;
145 3 P0 = led[digit] ;
146 3 Delay(10);
147 3 temp_h = P2 & 0xf0; //取P2的高四位
148 3 temp_h = temp_h | 0x0f; //拼装 temp_h,进行位选
149 3 temp_h = _cror_(temp_h,1);
150 3 temp_h = temp_h & 0xf0; //取高四位
151 3 temp_l = P2 & 0x0f; //取P2的低四位
152 3 P0 = 0xff;
153 3 P2 = temp_h | temp_l; //设定P2口
154 3 }//while结束
155 2 }//else结束
156 1 }
C51 COMPILATION COMPLETE. 1 WARNING(S), 4 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -