⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stc_to_rs232.c

📁 STC单片机读取FPGA筒形寄存器并通过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 + -