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

📄 zfs_com.c

📁 Uart串口自发送程序,单片机自动给上位机传送数据
💻 C
字号:
#include <reg52.h> 

#ifndef _DG_TYPE_ 
#define _DG_TYPE_ 
typedef unsigned char uchar; 
typedef unsigned int uint; 
#endif 

#define CMD_LEN 75 // 命令长度 
#define CMD_TAG 1 // 提示符长度 

void UartInit(); 
void UartSendChar(unsigned char ch); 
void UartSendStr(uchar *pStr); 
void UartCharPro(uchar ch); 
void UartCmdPro(); 

uchar g_ucCmd[CMD_LEN + 1] = {0}; 
uchar g_ucLen = 0; // 命令长度 
uchar g_ucCur = 1; // 光标位置 

void main() 
{ 
UartInit(); 

UartSendStr("\r\n"); 
UartSendStr(" DDDDDDD DDDDDDDDDDDDDD\r\n"); 
UartSendStr(" DDDDDD DDDDDDDDDDDDD\r\n"); 
UartSendStr(" DDDDDD DDDDDDDDDDD\r\n"); 
UartSendStr(" DDDDD DDDDDDDDDD\r\n"); 
UartSendStr(" DDDDD DDDDDDDD\r\n"); 
UartSendStr(" DDDD DDDDDDDDDDD\r\n"); 
UartSendStr(" DDD DDDDDDDDDDDDDDD\r\n\r\n"); 
UartSendStr(" -- DG100 UART TEST PROGRAM -- \r\n"); 
UartSendStr(" by Donald\r\n\r\n>"); 

while(1); 
} 

/************************************************************ 
* Name: UartInit 
* Func: 
* 串行通信初始化 
* Para: 
* uchar ch: 发送的字符 
* Return: None 
***********************************************************/ 
void UartInit() 
{ 
SCON = 0x50; // SCON: serail mode 1, 8-bit UART 
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit reload 
PCON |= 0x80; // SMOD=1; 
TH1 = 0xFA; // Baud:9600 fosc=11.0592MHz 
TL1 = 0xFA; 
IE |= 0x90; // 使能串行中断 

TR1 = 1; // 启动TIMER1 
EA = 1; 
} 

/************************************************************ 
* Name: UartSendChar 
* Func: 
* 向串口发送一个字符 
* Para: 
* uchar ch: 发送的字符 
* Return: None 
***********************************************************/ 
void UartSendChar(unsigned char ch) 
{ 
SBUF = ch; 
while(TI==0); 
TI=0; 
} 


/************************************************************ 
* Name: UartSendStr 
* Func: 
* 向串口发送以0结尾的字符串 
* Para: 
* uchar *pStr: 发送的字符指针 
* Return: None 
***********************************************************/ 
void UartSendStr(uchar *pStr) 
{ 
while(*pStr != 0) { 
SBUF = *pStr++; 
while(TI==0); 
TI=0; 
} 
} 

void UartSrv() interrupt 4 
{ 
unsigned char ch; 
ch = SBUF; 
if(RI) 
{ 
RI = 0; 
//UartSendChar(ch); 
//P0 = ~ch; 
UartCharPro(ch); 
} 
} 

/************************************************************ 
* Name: UartCharPro 
* Func: 
* 字符处理过程函数。根据输入的普通字符或控制字符判断回显。 
* Para: 
* uchar ch: 判断的字符 
* Return: None 
***********************************************************/ 
void UartCharPro(uchar ch) 
{ 
P0 = ~ch; 
switch(ch) { 
case '\b': // 退格键 
if(g_ucCur > CMD_TAG) { 
UartSendChar('\b'); 
UartSendChar(' '); 
UartSendChar('\b'); 
if(g_ucLen) { 
g_ucLen--; 
} 
g_ucCur--; 
} 
break; 
case '\r': // 回车键 
UartSendChar('\r'); 
UartSendChar('\n'); 
g_ucCmd[g_ucLen] = 0; 
UartSendStr(g_ucCmd); 
UartSendChar('\r'); 
UartSendChar('\n'); 
UartSendChar('>'); 
g_ucLen = 0; 
g_ucCur = 1; 
break; 
default: // 其它字符 
UartSendChar(ch); 

g_ucCur++; 
if(g_ucLen < CMD_LEN) { 
g_ucCmd[g_ucLen++] = ch; 
} 
else { 
g_ucCmd[g_ucLen] = 0; 
} 
} 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -