📄 串口通信.lst
字号:
C51 COMPILER V7.07 確口蚠信 09/25/2006 13:52:28 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE 確口蚠信
OBJECT MODULE PLACED IN 串口通信.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 串口通信.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //通过SPI实现两机通讯, //
2 //采用中断方式实现双全工通讯。 //
3 //MISO----MISO //
4 //MOSI----MOSI //
5 //SCK ----SCK //
6 ///SS ----/SS //
7 //将要发送的数据加载到发送缓冲区的函数fill_tx_buffer //
8 //和从接收缓冲区读出数据的函数read_rx_buffer未给出, //
9 //根据各自需求请自己完成。 //
10 #define SPI_RX_BUFFER_SIZE 10
11 #define SPI_RX_BUFFER_MASK ( SPI_RX_BUFFER_SIZE - 1 )
12 #define SPI_TX_BUFFER_SIZE 10
13 #define SPI_TX_BUFFER_MASK ( SPI_TX_BUFFER_SIZE - 1 )
14 #define SET_SPI_MODE PORTB.4
15 #define SPI_MODE PINB.4
16
17 static unsigned char SPI_RxBuf[SPI_RX_BUFFER_SIZE];
18 static volatile unsigned char SPI_RxHead;
19 static unsigned char SPI_TxBuf[SPI_TX_BUFFER_SIZE];
20 static volatile unsigned char SPI_TxHead;
21 //******************************************
22 // SPI 中断服务程序
23 //******************************************
24 void spi_isr(void)
25 {
26 1 unsigned char data;
*** ERROR C141 IN LINE 26 OF 串口通信.C: syntax error near ';'
27 1 if(spi_m==0) //如果spi_m为0,表明是接收状态
*** ERROR C202 IN LINE 27 OF 串口通信.C: 'spi_m': undefined identifier
28 1 {
29 2 data = SPDR; //读入接受到的数据
*** ERROR C141 IN LINE 29 OF 串口通信.C: syntax error near '='
*** ERROR C202 IN LINE 29 OF 串口通信.C: 'SPDR': undefined identifier
30 2 SPI_RxBuf[SPI_RxHead-1] = data; //将接收到的数据存入接收缓存区
*** ERROR C141 IN LINE 30 OF 串口通信.C: syntax error near 'data'
31 2 if ( SPI_RxHead == SPI_RX_BUFFER_MASK ) //如果是接收帧的最后一个数据
32 2 {
33 3 SPI_RxHead = 0; //已接收数据还原
34 3 MSTR=1; //接收完成,将SPI设回主方式?????
*** ERROR C202 IN LINE 34 OF 串口通信.C: 'MSTR': undefined identifier
35 3 spi_trans_com=1; //置接收完成标志
*** ERROR C202 IN LINE 35 OF 串口通信.C: 'spi_trans_com': undefined identifier
36 3 }
37 2 else
38 2 {
39 3 SPI_RxHead++; //已接收数据计数器加1
40 3 }
41 2
42 2 }
43 1 else //如果spi_m为1,表明是发送状态
44 1 {
45 2
46 2 if ( SPI_TxHead <= SPI_TX_BUFFER_MASK) //如果要发送的数据还未全部发完
47 2 {
48 3 SPDR = SPI_TxBuf[SPI_TxHead]; //从发送缓存区取数发送
C51 COMPILER V7.07 確口蚠信 09/25/2006 13:52:28 PAGE 2
*** ERROR C202 IN LINE 48 OF 串口通信.C: 'SPDR': undefined identifier
49 3 SPI_TxHead++; //已发送数据计数器加1
50 3 }
51 2 else //如果要发送的数据已全部发完
52 2 {
53 3 SPI_TxHead=0; //已发送数据计数器还原
54 3 DDRB.4=0;
*** ERROR C202 IN LINE 54 OF 串口通信.C: 'DDRB': undefined identifier
*** ERROR C141 IN LINE 54 OF 串口通信.C: syntax error near '.4'
55 3 SET_SPI_MODE=1; //释放总线,以便接收方进入主发送。
*** ERROR C202 IN LINE 55 OF 串口通信.C: 'PORTB': undefined identifier
*** ERROR C141 IN LINE 55 OF 串口通信.C: syntax error near '.4'
56 3 spi_m=0;
*** ERROR C202 IN LINE 56 OF 串口通信.C: 'spi_m': undefined identifier
57 3 spi_sending=0; //清空发送中标记
*** ERROR C202 IN LINE 57 OF 串口通信.C: 'spi_sending': undefined identifier
58 3 }
59 2
60 2 }
61 1
62 1 }
63
64 //******************************************
65 // SPI 初始化
66 //******************************************
67 void InitSPI(void)
68 {
69 1
70 1 SPCR=0x52;
*** ERROR C202 IN LINE 70 OF 串口通信.C: 'SPCR': undefined identifier
71 1 SPI_RxHead = 0;
72 1 SPI_TxHead = 0;
73 1
74 1 }
75
76 //******************************************
77 //发送数据
78 //******************************************
79 void spi_send(void)
80 {
81 1 if(spi_sending==0) //发送中标记为0,表明spi发送空闲
*** ERROR C202 IN LINE 81 OF 串口通信.C: 'spi_sending': undefined identifier
82 1 {
83 2
84 2 fill_tx_buffer(); //调用fill_tx_buffer函数,将要发送的数据加载到发送缓冲区
85 2 while(PINB.4==0) //如果PINB.4为低,表明总线被接受方占用,等待直至接受方发送完成。
86 2 {;}
87 2
88 2 InitSPI(); //初始化spi为主方式
89 2 DDRB.4=1;
90 2 SET_SPI_MODE=0; //将PORTB.4拉低,强迫接收方进入从接收方式
91 2 spi_m=1; //置spi_m标志表明为发送状态
92 2 delay_us(10);
93 2 spi_sending=1; //置spi_sending标志表明发送进行中
94 2 SPDR=0xFF; //开始发送,接收方接收到的第一个数据为0xFF应忽略
95 2 SPIE=1; //开SPI中断,
96 2 SPI_TxHead = 0; //已发送数据计数器清0
97 2 }
98 1 }
99
100 void main(void)
101 {
C51 COMPILER V7.07 確口蚠信 09/25/2006 13:52:28 PAGE 3
102 1
103 1 ...
104 1 while(1)
105 1 {
106 2 ...
107 2
108 2 if(spi_trans_com==1) //如果接收完成标志为1,表明有所数据已接收
109 2 {
110 3 read_rx_buffer(); //调用read_rx_buffer函数,将接收到的数据从接收缓冲区读出
111 3 spi_trans_com=0; //读完清除接收完成标志
112 3 }
113 2 ...
114 2
115 2 }
116 1
117 1 }
C51 COMPILATION COMPLETE. 0 WARNING(S), 16 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -