📄 stc_to_rs232.c
字号:
/********************************************************************
* 程序功能 : 接收FPGA数据并将接收到的数据上传给PC
*
* 应用软件 : KEIL C
*
* 版 本 : KEIL 8.02
*
* 硬 件 : STC89C58RD+
*
* 创建时间 : 2007-12-27
*
* 创 建 人 : 吕坤
*
********************************************************************/
/* 说 明 :
____
| 数据准备完毕,低电平有效
date_reday: |____________________________________________________.........
________ ________ ________
| | | | | |
down_date : ____| |________| |________| |________
___________________________________________________________
date_done : |数据发送完毕,低电平有效
|_______________
FPGA : ↓数据更新 ↓数据更新 ↓数据更新........FPGA寄存器
date :◆◆◆◆◆◆◆延时◆读取◇◆◆◆延时◆读取◇◆◆◆延时◆读取◇
◆:等待周期
◇:读取周期
*/
#include <reg52.h>
#include <stdio.h>
#include <string.h>
#define DATA4 P1;
int DELAY_TIME_VALUE = 50000; /*延时时间*/
sbit down_date=P1^4; /*数据接收脉冲信号脚,下降沿有效*/
sbit date_done=P1^5; /*数据发送完毕标志,低电平有效 */
bit biaozhi; /*满1字节标志量,0为不足1字节,1为满1字节*/
char date; /*接收到的数据 */
bit date_reday=1; /* 数据准备完毕中断用信号位 */
void delay(long int a); /*延时程序 */
char getValue(void); /*从P1口获得 低4位 数据*/
void send_date(char); /*向上位机发送数据*/
void int0() interrupt 0 /*外部中断0,调整信号灯*/
{
date_reday=0;
}
void main(void)
{
IT0=1; /*调整INT0为下降沿触发*/
EX0=1; /*中断INT0使能*/
EA=1; /*打开所有中断允许*/
biaozhi=0;
SCON=0X50; /*串口模式1,允许接收 */
TMOD=0X20; /*初始化T1为定时,选择模式2,M1=1,M0=0,自动装入8位定时器 */
PCON=0X80; /*设置SMOD=1,倍增器为1 */
TL1=0Xfa; /*设定计数器1初值*/
TH1=0Xfa; /*设定计数器1重装值 11.0592Mhz 比特率为 9600*/
TR1=1; /*启动定时器 */
while(1)
{
date_reday=1;
date_done=1;
while(date_reday); /*等待准备完毕信号*/
while(date_done) /*检查数据是否发送完毕*/
{
if(biaozhi==0) /*数据位置标志位,为0则为高4位,为1则为第四位*/
{
date=getValue();/*获取P1口低4位数据*/
biaozhi=1; /*切换到高4位*/
/*如果最后位置传输为4bit,则上移动到高四位,第四位补0,并发送给上位机*/
if(date_done==0)
{
send_date(date<<4);
}
}
else if(biaozhi==1)
{
date=date<<4; /*将数据左移到高4位*/
date+=getValue(); /*获取P1口数据,并将获取数据放在低4位*/
biaozhi=0; /*将数据切换到第四位*/
send_date(date); /*发送满8位的数据*/
}
}
/***** 文件结束,输出 *end ********/
/*send_date(0x2a);*/
/*send_date(0x65);*/
/*send_date(0x6e);*/
/*send_date(0x64);*/
}
}
/***延时程序***/
void delay(long int a)
{
for(;a>0;a--);
}
/**发出脉冲,获得数据。其中,下降沿FPGA更新数据**/
char getValue(void)
{
char return_value;
down_date=0;
delay(100);
return_value=P1&0x0f;
down_date=1;
delay(100);
return return_value;
}
/** 向 pc 机发送数据 ****/
void send_date(char d)
{
SBUF=d;
while(TI==0);
TI=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -