📄 stc_to_rs232.lst
字号:
C51 COMPILER V8.02 STC_TO_RS232 01/04/2008 16:19:16 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE STC_TO_RS232
OBJECT MODULE PLACED IN stc_to_RS232.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE stc_to_RS232.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************
2 * 程序功能 : 接收FPGA数据并将接收到的数据上传给PC
3 *
4 * 应用软件 : KEIL C
5 *
6 * 版 本 : KEIL 8.02
7 *
8 * 硬 件 : STC89C58RD+
9 *
10 * 创建时间 : 2007-12-27
11 *
12 * 创 建 人 : 吕坤
13 *
14 ********************************************************************/
15 /* 说 明 :
16 ____
17 | 数据准备完毕,低电平有效
18 date_reday: |____________________________________________________.........
19 ________ ________ ________
20 | | | | | |
21 down_date : ____| |________| |________| |________
22 ___________________________________________________________
23 date_done : |数据发送完毕,低电平有效
24 |_______________
25 FPGA : ↓数据更新 ↓数据更新 ↓数据更新........FPGA寄存器
26 date :◆◆◆◆◆◆◆延时◆读取◇◆◆◆延时◆读取◇◆◆◆延时◆读取◇
27 ◆:等待周期
28 ◇:读取周期
29 */
30
31 #include <reg52.h>
32 #include <stdio.h>
33 #include <string.h>
34
35 #define DATA4 P1;
36 int DELAY_TIME_VALUE = 50000; /*延时时间*/
37
38 sbit down_date=P1^4; /*数据接收脉冲信号脚,下降沿有效*/
39 sbit date_done=P1^5; /*数据发送完毕标志,低电平有效 */
40
41 bit biaozhi; /*满1字节标志量,0为不足1字节,1为满1字节*/
42 char date; /*接收到的数据 */
43
44 bit date_reday=1; /* 数据准备完毕中断用信号位 */
45
46 void delay(long int a); /*延时程序 */
47 char getValue(void); /*从P1口获得 低4位 数据*/
48 void send_date(char); /*向上位机发送数据*/
49
50
51 void int0() interrupt 0 /*外部中断0,调整信号灯*/
52 {
53 1 date_reday=0;
54 1 }
55 void main(void)
C51 COMPILER V8.02 STC_TO_RS232 01/04/2008 16:19:16 PAGE 2
56 {
57 1 IT0=1; /*调整INT0为下降沿触发*/
58 1 EX0=1; /*中断INT0使能*/
59 1 EA=1; /*打开所有中断允许*/
60 1 biaozhi=0;
61 1 SCON=0X50; /*串口模式1,允许接收 */
62 1 TMOD=0X20; /*初始化T1为定时,选择模式2,M1=1,M0=0,自动装入8位定时器 */
63 1 PCON=0X80; /*设置SMOD=1,倍增器为1 */
64 1 TL1=0Xfa; /*设定计数器1初值*/
65 1 TH1=0Xfa; /*设定计数器1重装值 11.0592Mhz 比特率为 9600*/
66 1 TR1=1; /*启动定时器 */
67 1
68 1 while(1)
69 1 {
70 2 date_reday=1;
71 2 date_done=1;
72 2 while(date_reday); /*等待准备完毕信号*/
73 2 while(date_done) /*检查数据是否发送完毕*/
74 2 {
75 3 if(biaozhi==0) /*数据位置标志位,为0则为高4位,为1则为第四位*/
76 3 {
77 4 date=getValue();/*获取P1口低4位数据*/
78 4 biaozhi=1; /*切换到高4位*/
79 4 /*如果最后位置传输为4bit,则上移动到高四位,第四位补0,并发送给上位机*/
80 4 if(date_done==0)
81 4 {
82 5 send_date(date);
83 5
84 5 }
85 4 }
86 3 else if(biaozhi==1)
87 3 {
88 4 date=date<<4; /*将数据左移到高4位*/
89 4 date+=getValue(); /*获取P1口数据,并将获取数据放在低4位*/
90 4 biaozhi=0; /*将数据切换到第四位*/
91 4 send_date(date); /*发送满8位的数据*/
92 4 }
93 3 }
94 2 /***** 文件结束,输出 *end ********/
95 2 /*send_date(0x2a);*/
96 2 /*send_date(0x65);*/
97 2 /*send_date(0x6e);*/
98 2 /*send_date(0x64);*/
99 2 }
100 1
101 1 }
102 /***延时程序***/
103 void delay(long int a)
104 {
105 1 for(;a>0;a--);
106 1 }
107
108 /**发出脉冲,获得数据。其中,下降沿FPGA更新数据**/
109 char getValue(void)
110 {
111 1 char return_value;
112 1 down_date=0;
113 1 delay(100);
114 1
115 1 return_value=P1&0x0f;
116 1 down_date=1;
117 1 delay(100);
C51 COMPILER V8.02 STC_TO_RS232 01/04/2008 16:19:16 PAGE 3
118 1 return return_value;
119 1 }
120
121 /** 向 pc 机发送数据 ****/
122 void send_date(char d)
123 {
124 1 SBUF=d;
125 1 while(TI==0);
126 1 TI=0;
127 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 171 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 5
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -