程序如下,但接收为乱码,请大家帮忙看看:
#include<reg51.h>#define uchar unsigned char
uchar txt[]="hello";
uchar i=0;
void main(void)
{
PCON=0X00;
SCON=0X50;
TMOD=0X20;
TH1=0XFD;
TL1=0XFD;
EA=1;
ES=1;
TR1=1;
while(1) {
if(i==6)
i=0;
if(TI==1)
TI=0;
if(RI==1)
RI=0;
}
}
void uart() interrupt 4
{
SBUF=txt[i++];
}
就是想用串口在电脑上显示,hello,但是就是乱码;
原来是做而论道兄啊,久仰久仰,我是你的粉丝哦;但是我把你修改的程序烧进去依然是乱码。
还有不解:if(i == 6)
{ i = 0;
TI = 1; }
它不是自己装载一帧数据,共十位嘛,装完之后,硬件自动将TI置位。但你把i==6时,就让TI=1,从而产生中断,信息会不会不完整啊?因为当我发第一个字母 h 时,一个字节8位,刚好装完发送,TI置1,因此我把TI=0这句删了,但是依然显示不正确;
#include
#define uchar unsigned char
uchar txt[] = "hello";
uchar i = 0;
bit Sended;
void main(void)
{
PCON = 0X00;
SCON = 0X50;
TMOD = 0X20;
TH1 = 0XFD;
TL1 = 0XFD;
TR1 = 1;
EA = 1;
ES = 1;
Sended = 1;
while(1) {
if(Sended) {
Sended = 0;
i = 0;
TI = 1;
}
}
}
void uart() interrupt 4
{
if(RI == 1) RI = 0;
if(TI == 1) {
TI = 0;
if (txt[i] != '\0') SBUF = txt[i++];
else Sended = 1;
}
}
写上了结尾检测功能,增加了一个结束标志。
在需要发送的时候,只要令 TI = 1; 即可持续发送到字符串的末尾。
发送到 '\0' 时,就不发送了。
主函数,不必等待每个字符的发送过程,工作效率可大大提高。
波特率为9600,晶振为11.0952的,我把你修改的程序烧进去,却没有什么显示了,麻烦你帮忙看看,谢谢了
本回答被网友采纳那串口中断是不是就没用了?
追答我一般都是查询发送,中断接收。
一道51单片机的C语言程序,关于串口通讯的,很简单...
ES=1; \/\/重新使能串口中断 flag=0; \/\/清除flag,为了等待下一次接收 } } } void serial() interrupt 4 \/\/串口中断服务程序,优先级为4 { RI=0; \/\/当接收完成之后RI被置一,发生串口中断,清标志位 a=SBUF; \/\/读取收到的字符,并赋给变量a flag=1; \/\/置接收完成标志...
51单片机与sim900a相连接的最简单的程序是什么?
1.将自己的51单片机的串口1连接到GSM的tx rx gnd 2.找到程序中前面的#define处,根据说明修改好自己的单片机配置,编译程序 2.下载程序 3.按下模块复位键,启动模块,等待信号灯闪烁变慢,复位单片机 4.等待发送成功 ***\/ #include <REGX52.H> #define uchar unsigned char #define uint unsigned int \/\/以下是...
51单片机通过串口实现数据的发送与接收程序
1,配置串口参数、波特率等,开启串口中断;void Init_UART(){ } 2,中断函数里写中断响应函数,根据接收的指令或者数据,执行相应的动作;程序一般为:void UART_ISR() interrupt x using y { ;串口中断处理函数 } x - 单片机的C51中断号 y - 指定使用的当前工作寄存器组号(0-3 PSW中...
51单片机串口通信c语言编程
\/\/串口初始化 void sinti(void){ SCON = 0x50;TMOD |= 0x20;TH1 = 0xFD;TR1 = 1;EA = 1;ES = 1;} void delay(int cnt){ while(--cnt);} \/\/主程序 int main (void){ int i;sinti(); \/\/串口初始化程序 ring=1;while(1){ while (1){ if(CASE1==0)...
求一51系列单片机C程序,最好是简单易懂,有注释。 程序目的:通过串口...
ES = 1;\/\/打开串口中断 TR1 = 1;\/\/定时器1开始计数 } void SendOneByte(unsigned char c)\/\/发送字节 { SBUF = c; \/\/赋值给SBUF启动发送 while(!TI); \/\/等待发送完成 TI = 0; \/\/清零发送完成标志位 } void SendString(unsigned char *p)\/\/发送字符串 { while(*p) \/\/如果p的内容不...
C语言51单片机串口通信程序求教
串口通讯,首先设置波特率,再设置串口模式,之后就可以收发数据了。比如:init(){TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1;SCON=0x50;}send(unsigned char dat){SBUF=dat;while(TI==0);TI==0;}unsigned char recive(){unsigned char dd;if(RI) { dd=SBUF; RI=0; } return(...
51单片机串口编程 小弟自学 但不才 求教~
http:\/\/hi.baidu.com\/%D7%F6%B6%F8%C2%DB%B5%C0\/blog\/item\/d50edc2fc09aa55c4ec226f4.html 串口收发的汇编程序如下:ORG 0000H SJMP MAIN ORG 0023H SJMP S_INT MAIN:MOV SCON, #0x50; \/\/串口工作在方式1.ANL PCON, #0x7F; \/\/SMOD=0 MOV TMOD, #0x20; \/\/定时器...
求一个51单片机程序,通过串口发送“hello,I'm STC89C52!”一行字符...
其实很简单的帮你写一个参考程序:晶振:11.0592 波特率9600 \/ \/ include "REG52.H"\/ 按键定义 \/ \/\/ unsigned char TABLE[] = "hello,I'm STC89C52";unsigned char UARTByte;\/\/ void UART_Send_Byte(unsigned char Byte);\/\/延时 void Delay_1ms(unsigned int time){ unsigned int a, b...
如何用51串口接受和发送数据,具体程序。
给你一个我自己写的串口通信程序,上层软件用串口调试助手即可,单片机软件如下:include <reg52.h> define uchar unsigned char sbit k5=P2^1;uchar zf[]={'0','1','2','3','4','5','6','3','7','8','9','a','b','c','d','e','f',0x00};uchar code dis[]={0xc0...
两个51单片机串口通信程序?
串行发送程序 Tx.asm :PCON, #00H ;; 波特率不倍增 SETB TR1 ;; 启动定时器T1 MOV IE, #0;; 禁止任何中断 CALL DLY125 ;; 延时125ms ;;--- T_X: ;; 透传发送字串 ACALL DSPLED ;; P2.0控制LED闪亮 MOV R3, #4 ;; 待发送字符个数 MOV ...