📄 main.lst
字号:
C51 COMPILER V8.08 MAIN 08/13/2009 16:42:46 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*********************************************************************************************************
-******************************
2 说明: 串口1拥有独立的波特率发生器,不需要占用定时器资源,在多机通讯时还具有自动硬件地址识别和帧出错检测
3 功能。本程序代码可以很好的实现自动硬件地址识别和通讯功能,利用串口调试助手发送地址和数据命令,单片机接
4 收有效命令后,将数据再发送到串口调试助手。操作注意点如下:发送十六进制数据55(55在程序中定义为硬件地址),
5 选择偶校验(偶校验保证了输出第8位为1),发送后会返回十六进制数据55,说明地址匹配,下面可以任意发送数据
6 (除了FF和AA)进行通讯,发送的数据都可以返回到串口调试助手,十六进制FF(偶校验为1)为系统默认的广播命令,
7 十六进制AA为程序中定义的通讯结束命令,因而可以发送AA结束此次通讯。串口调试助手(serial V2.2.exe)在UART1文
8 件夹中。
9 要求:打开拨码开关J4,使串口1有效。
10 **********************************************************************************************************
-******************************/
11 #include <sh88f516.h>
12
13 unsigned char data RCV_num;
14 bit flag1;
15 void init();
16 void SendChar(unsigned char value);
17
18 main()
19 {
20 1 init();
21 1
22 1 while(1)
23 1 {
24 2 if(flag1)
25 2 {
26 3 flag1 = 0;
27 3 SendChar(RCV_num);
28 3 }
29 2 }
30 1
31 1 }
32
33
34 void init()
35 {
36 1
37 1 CLKCON = 0x00; //时钟设置 系统时钟=晶振频率 Fsys=16MHz
38 1
39 1 SADDR1 = 0x55; //多机通讯时的从机地址设置=0x55
40 1 SADEN1 = 0xFF; //从机地址屏蔽设置
41 1
42 1 SCON1 = 0xF0; //工作在方式3 ,多机通讯模式
43 1 SBRT1 = 0xFF; //工作在方式3时,BAUDRATE=(1/16)*Fsys/(32768-SBRT[1:0]) Fsys=16MHz
44 1 SBRT0 = 0x98; //BAUDRATE=9600时, SBRT[1:0]=0x7F98, SBRT1.7=1 --> SBRT1=0xFF, SBRT0 = 0x98;
45 1
46 1 IEN1 = 0x04; //ES1=1,不可位寻址
47 1 EA = 1; //开启总中断
48 1
49 1 }
50
51
52 void UART1_RCV_INT() interrupt 9 using 3 //串口接收中断的中断号为9.
53 {
C51 COMPILER V8.08 MAIN 08/13/2009 16:42:46 PAGE 2
54 1
55 1 IEN1 &= 0xFB; //关闭串口1中断
56 1 SCON1 &= 0xDF; //SM12_TXCOL = 0;
57 1
58 1 RCV_num = SBUF1;
59 1
60 1
61 1 if(RCV_num==0xAA) //收到0xAA就结束此次通讯
62 1 {
63 2 SCON1 |= 0x20; //SM12_TXCOL = 1;
64 2 }
65 1
66 1 flag1 = 1;
67 1
68 1 RI1 = 0; //清除串口1中断标志位
69 1 IEN1 |= 0x04; //打开串口1中断
70 1 }
71
72 void SendChar(unsigned char value)
73 {
74 1 IEN1 &= 0xFB; //ES1=0;
75 1 SBUF1=value; //写SBUF1,激活发送
76 1 while(TI1==0); //等待转换结束
77 1 TI1=0; //清除发送标志位
78 1 IEN1 |= 0x04; //ES1=1;
79 1 }
80
81
82
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 86 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -