📄 ex8-6c.lst
字号:
C51 COMPILER V8.18 EX8_6C 11/27/2009 22:29:17 PAGE 1
C51 COMPILER V8.18, COMPILATION OF MODULE EX8_6C
OBJECT MODULE PLACED IN ex8-6c.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ex8-6c.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "stc12c5a.h" //包含STC12C5A60S2寄存器定义文件
2 #define MASTER 1 //作为从机程序时,将该行注释掉
3
4 bit SPI_Receive; //SPI 端口收到数据标志位
5 unsigned char idata SPI_buffer _at_ 0x30; //保存SPI端口收到的数据
6
7 void main(void)
8 {
9 1 unsigned char tmpdata,SPI_status;
10 1 #ifdef MASTER
11 1 //初始化串口
12 1 SCON=0x50; //0101,0000 8位可变波特率, 无奇偶校验
13 1 TMOD=0x21; //定时器T1为自动重装模式
14 1 TH1=0xf6;
15 1 TL1=0xf6;
16 1 AUXR= AUXR|0x40; //T1以1T的速度计数
17 1 TR1=1; //启动定时器1
18 1 //初始化SPI
19 1 SPCTL=0xfc; //详细注释与汇编语言相同
20 1 #else
SPCTL=0xec; //详细注释与汇编语言相同
#endif
23 1 SPSTAT=0xc0; //清0标志位SPIF和WCOL
24 1 IE2=IE2|0x02; //ESPI(IE2.1)=1,允许SPIF产生中断
25 1 SPI_Receive=0; //清标志字
26 1 EA=1; //开总中断
27 1
28 1 while(1) //主循环
29 1 {
30 2 #ifdef MASTER
31 2 if(RI) //判RS-232 串口中收到数据否
32 2 {
33 3 tmpdata=SBUF; //读取RS-232串口中收到的数据
34 3 RI=0;
35 3 //将数据发送到从机SPI
36 3 IE2&=0xfd; // ESPI(IE2.1)=0,禁止SPIF产生中断
37 3 SPDAT=tmpdata; //SPI 发送数据
38 3 SPI_status=0;
39 3 while(SPI_status==0)
40 3 {
41 4 SPI_status=SPSTAT; //等待SPIF=1即等待SPI发送完毕
42 4 SPI_status=SPI_status&0x80;
43 4 }
44 3 IE2|=0x02; //ESPI(IE2.1)=1,允许SPIF产生中断
45 3 continue;
46 3 }
47 2 if (SPI_Receive) //判收到从SPI发回数据否
48 2 {
49 3 SPI_Receive=0; //清0主单片机SPI端口收到数据标志位
50 3 TI=0; //清零串口发送中断标志
51 3 SBUF=SPI_buffer; //将接收到的数据从RS232串口发送到计算机
52 3 while(TI==0); //等待发送完毕
53 3 TI=0; //清零串口发送中断标志
54 3 }
55 2 #else
C51 COMPILER V8.18 EX8_6C 11/27/2009 22:29:17 PAGE 2
if (SPI_Receive) //判收是否收到主机SPI发来的数据
{
SPI_Receive=0; //清0主单片机SPI端口收到数据标志位
SPDAT=SPI_buffer; //将收到数据送SPDAT,准备下一次通讯时发回
}
#endif
62 2 }
63 1 }
64 void SPI_ISR(void) interrupt 9
65 {
66 1 SPSTAT=0xc0; //清0标志位SPIF和WCOL
67 1 SPI_buffer=SPDAT; //保存收到的数据
68 1 SPI_Receive=1; //设置SPI端口收到数据标志
69 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 99 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -