📄 16c554.lst
字号:
C51 COMPILER V8.02 16C554 05/23/2008 11:50:50 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 16C554
OBJECT MODULE PLACED IN 16C554.OBJ
COMPILER INVOKED BY: D:\软件安装路径\C51\BIN\C51.EXE 16C554.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <REG952.H>
2 #include <intrins.H>
3 #include "16C554.h"
4 #include "uart.h"
5
6 #define uchar unsigned char
7 #define uint unsigned int
8
9 uchar d554,s[8]={0x08,0x18,0x28,0x38,0x00,0x10,0x20,0x30};
10
11 #define RBUF_SIZE554 8
12 #define SIZEMASK554 0x7
13
14 static unsigned char r_in554 = 0;
15 static unsigned char r_out554 = 0;
16 static unsigned char rbuf554[RBUF_SIZE554];
17
18
19 static void Serial_Int1(void) interrupt 2 using 0
20 {
21 1 uchar c,k;
22 1 EA=0;
23 1 for(k=0;k<8;k++)
24 1 {
25 2 c = 0x0f&SC16C554_Read(s[k]|ISR); //获取中断状态
26 2
27 2 if(c==0x04)
28 2 {
29 3 d554=k;
30 3 while(!SC16C554_Read(s[d554]|LSR)&0x1); //等待接收到的数据准备好
31 3 if (((r_in554 +1)&SIZEMASK554)!=r_out554)
32 3 {
33 4 rbuf554[r_in554]=SC16C554_Read(s[d554]|RHR); //接收数据
34 4 r_in554=(r_in554+1)&SIZEMASK554;
35 4 }
36 3 }
37 2 }
38 1 EA=1;
39 1 }
40
41 char com_getchar554(uchar *ch)
42 {
43 1 uchar b;
44 1 EX1=0;
45 1 if (com_rbuflen554()==0)
46 1 {
47 2 EX1=1;
48 2 return 0;
49 2 }
50 1 b=rbuf554[r_out554];
51 1 r_out554=(r_out554+1)&SIZEMASK554;
52 1
53 1 *ch=b;
54 1 EX1=1;
55 1 return (1);
C51 COMPILER V8.02 16C554 05/23/2008 11:50:50 PAGE 2
56 1 }
57
58 /*计算接收缓冲器长度*/
59 unsigned char com_rbuflen554(void)
60 {
61 1 return ((r_in554 -r_out554)&SIZEMASK554);
62 1 }
63
64 //*************************************************************************
65 //函数名: SC16C554_Write
66 //功 能: 写SC16C554 寄存器
67 //入参数: reg=要写的寄存器地址,val=要写的值
68 //出参数: 无
69 //*************************************************************************
70 void SC16C554_Write(unsigned char Reg, unsigned char Val)
71 {
72 1 EA=0;
73 1 P5=Reg;
74 1 _nop_();
75 1 P4=0xEF&P4;
76 1 P0 = Val;
77 1 _nop_(); //_nop_()1us
78 1 P4=0x10|P4;
79 1 EA=1;
80 1 }
81
82 //*************************************************************************
83 //函数名: SC16C554_Read
84 //功 能: 读SC16C554寄存器
85 //入参数: reg=要读的寄存器地址
86 //出参数: 寄存器值
87 //*************************************************************************
88 unsigned char SC16C554_Read(unsigned char Reg)
89 {
90 1
91 1 unsigned char RegData;
92 1 EA=0;
93 1 P5=Reg;
94 1 _nop_();
95 1 P4=0xDF&P4;
96 1 RegData = P0;
97 1 P4=0x20|P4;
98 1 return RegData;
99 1 EA=1;
100 1 }
101
102 void SC16C554_SET(uchar PortID,uint baudrate)
103 {
104 1 uchar dll,dlm;
105 1 dll=(uchar)(1562500/baudrate);
106 1 dlm=(uchar)(1562500/baudrate/256);
107 1 SC16C554_Write(PortID|LCR,0x80); //设置波特率
108 1 SC16C554_Write(PortID|DLL,dll); //设置DLL 低位
109 1 SC16C554_Write(PortID|DLM,dlm); //设置DLL 高位
110 1 SC16C554_Write(PortID|LCR,0x03); //8位数据,1 位停止位,无奇偶校验位
111 1 SC16C554_Write(PortID|MCR,0x0); //清除外部输出
112 1 SC16C554_Write(PortID|FCR,0x0f); //FIFO
113 1 SC16C554_Write(PortID|IER,0x00); //设置16C554禁止所有中断
114 1 SC16C554_Write(PortID|IER,0x01); //允许554receiver ready interrupt
115 1 SC16C554_Write(PortID|MCR,0x08); //打开554串口总开关
116 1 }
C51 COMPILER V8.02 16C554 05/23/2008 11:50:50 PAGE 3
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 354 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 19 8
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 + -