标题:
STC单片机板串口通信工程 简单上下位机通信_C版
[打印本页]
作者:
林仆仆
时间:
2018-9-5 13:18
标题:
STC单片机板串口通信工程 简单上下位机通信_C版
简单上下位机通信_C版
单片机源程序如下:
/**********************
文件名称:uart.c
作者:甘祥
说明:串口通信例程测试
修改记录:
***********************/
/**********************
基于STC15F2K60S2系列单片机C语言编程实现
使用如下头文件
***********************/
#include "STC15F2K60S2.h"
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define Machine_Focs 11059200L //晶振频率
#define BAUD1 9600 //波特率
#define NMAX_KEY 100 //按键抖动次数
sbit Key1 = P3^2 ; //启动发送
sbit Key2 = P3^3 ; //数字减少
sbit Key3 = P1^7 ; //数字增加
sbit LED_SEL=P2^3;
uchar G_count;
uchar display; //显示发送数据
uint Key1_count; //按键1计数
uint Key2_count; //按键2计数
uint Key3_count; //按键3计数
uint Key_count; //按键总的抖动次数
bit flg_1ms; //1ms的标志
bit Key1_C;/*key1当前的状态*/
bit Key1_P;/*key1前一个状态*/
bit Key2_C;/*key2当前的状态*/
bit Key2_P;/*key2前一个状态*/
bit Key3_C;/*key3当前的状态*/
bit Key3_P;/*key3前一个状态*/
/*收发显示数据相关*/
bit Uart1_Sendbusy = 0 ;
unsigned char display,flag;
uchar duanxuan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //显示0-f
/**********************
函数名称:Timer0
功能描述:定时器0的中断响应函数 ,定时100us
***********************/
void Timer0() interrupt 1
{
TH0=(65535-1000)/256; //定时器初始值
TL0=(65535-1000)%256;
G_count++;
if(G_count==10) //中断10次对应1ms
{
G_count=0;
flg_1ms=1;
}
flag++;
if(flag==2)
flag=0;
P0=0;
switch(flag)
{
case 0: P2=0x00;P0=duanxuan[display/16];break;
case 1: P2=0x01;P0=duanxuan[display%16];break;
}
}
/****************************************************************************
*Uart1_Init()
*初始化串口1的相关设置,设定串口的波特率等
***************************************************************/
void Uart1_Init(void)
{
AUXR=0X80; //辅助寄存器 此时定时器0的速度是传统的12倍,不分频
SCON|=0X50; //允许接收
TL1=(65536-(Machine_Focs/4/BAUD1));
TH1=(65536-(Machine_Focs/4/BAUD1))>>8;
AUXR|=0X40; //辅助寄存器 此时定时器1的速度是传统的12倍,不分频
RI=0; //接收中断标志位
TI=0; //发送中断标志位
TR1=1; //启动定时器1
ES=1; //串口中断允许位
EA=1; //总中断允许位
PS = 1 ; //串口1中断高优先级
}
/*****************************************************************************
*SendComData(INT8U)
*发送单个字符给UART1以发送到PC机
*如果需要奇偶校验则此处需要修改
*入口参数:dat,需要发送的八位数据
******************************************/
void SendData(unsigned char dat)
{
while(Uart1_Sendbusy);
Uart1_Sendbusy=1;
SBUF=dat;
}
/********************************************************************************************
*Uart1()
*串口1中断服务程序
*/
void Uart1_fun() interrupt 4 using 1
{
if(RI) //接受完数据后 RI自动制1
{
RI=0;
display=SBUF;
}
if(TI) //发送完数据后 RI自动制1
{
TI=0;
Uart1_Sendbusy=0;
}
}
/**********************
函数名称:Init
功能描述:完成各部分功能模块的初始化
入口参数:无
出口参数:无
备注:
***********************/
void Init()
{
/************* **系统初始化 *******************/
//推挽模式
P3M0=0x00;
P3M1=0x00;
P2M0=0xff;
P2M1=0x00;
P0M0=0xff;
P0M1=0x00;
TMOD=0x01;//定时器0,方式1
ET0=1;//开启定时器中断
TH0=(65535-1000)/256;
TL0=(65535-1000)%256;
TR0=1;//启动定时器
Uart1_Init(); //外部中断:低优先级
display = 0x00;
LED_SEL=0;
flg_1ms=0;
/*初始化所有按键的当前状态、前一个状态*/
Key1_C=1;/*key1当前的状态*/
Key1_P=1;/*key1前一个状态*/
Key2_C=1;/*key2当前的状态*/
Key2_P=1;/*key2前一个状态*/
Key3_C=1;/*key3当前的状态*/
Key3_P=1;/*key3前一个状态*/
Key1_count=0x80+NMAX_KEY/3*2;
Key2_count=0x80+NMAX_KEY/3*2;
Key3_count=0x80+NMAX_KEY/3*2;
Key_count=NMAX_KEY;
}
/********************************************************************/
void main()
{
Init();
while(1)
{
if(flg_1ms)
{
flg_1ms=0;
if(Key1==0)
Key1_count--;
if(Key2==0)
Key2_count--;
if(Key3==0)//按键是按下状态
Key3_count--;
Key_count--;//总的次数减1
if(Key_count==0)//100次完了
{
if(Key1_count<0x80)
{
Key1_C=0;
if(Key1_P==1) //下降沿(按键做动作)
{
Key1_P=0;
SendData(display) ;
}
}
if(Key1_count>=0x80)
{
Key1_C=1;
if(Key1_P==0)
Key1_P=1; //上升沿(假设不做动作那就继续)
}
if(Key2_count<0x80)
{
Key2_C=0;
if(Key2_P==1) //下降沿(按键做动作)
{
Key2_P=0;
display--;
}
}
if(Key2_count>=0x80)
{
Key2_C=1;
if(Key2_P==0)
Key2_P=1; //上升沿(假设不做动作那就继续)
}
if(Key3_count<0x80)
{
Key3_C=0;
if(Key3_P==1) //下降沿(按键做动作)
{
Key3_P=0;
display++;
}
}
if(Key3_count>=0x80)
{
Key3_C=1;
if(Key3_P==0)
Key3_P=1; //上升沿(假设不做动作那就继续)
}
/*新一轮的判断*/
Key1_count=0x80+NMAX_KEY/3*2;
Key2_count=0x80+NMAX_KEY/3*2;
Key3_count=0x80+NMAX_KEY/3*2;
Key_count=NMAX_KEY;
}
}
}
}
复制代码
所有资料51hei提供下载:
简单上下位机通信_C版.zip
(67.55 KB, 下载次数: 7)
2018-9-5 13:18 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1