標(biāo)題:
關(guān)于STC12C5A60S2單片機(jī)雙串口程序問(wèn)題
[打印本頁(yè)]
作者:
楠仔高
時(shí)間:
2019-3-11 14:32
標(biāo)題:
關(guān)于STC12C5A60S2單片機(jī)雙串口程序問(wèn)題
為什么我的程序編譯成功了,但是串口2卻不會(huì)發(fā)送數(shù)據(jù)呢?謝謝!
#include<STC12C5A60S2.h>
#include <stdio.h>
#include <string.h>
#include<intrins.h>
#include "UART2.h"
#define uchar unsigned char
#define uint unsigned int
uchar code dis_tab1[]={" 識(shí)別結(jié)果 "};
uchar code dis_tab4[]={"------------------------"};
uchar RecDate[14]={0}; //串口接收 數(shù)據(jù)
uint count_ms=0; //計(jì)時(shí)
uchar recnum2=0; //串口接收長(zhǎng)度
uchar disflag=0;//顯示模式
bit recfinish=0; //串口接收完成為1
void Timer0Init(void) //10m秒@11.0592MHz
{
TMOD &= 0xF0; //設(shè)置定時(shí)器模式
TMOD |= 0x01; //設(shè)置定時(shí)器模式
TL0 = 0x00; //設(shè)置定時(shí)初值
TH0 = 0xDC; //設(shè)置定時(shí)初值
TF0 = 0; //清除TF0標(biāo)志
TR0 = 0; //定時(shí)器0關(guān)閉計(jì)時(shí)
ET0=1;
EA=1;
}
/* 串行通信初始化*/
void UartInit(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位數(shù)據(jù),可變波特率
TMOD &= 0x0F; //清除定時(shí)器1模式位
TMOD |= 0x20; //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式
TL1 = 0xfd; //設(shè)定定時(shí)初值
TH1 = 0xfd; //設(shè)定定時(shí)器重裝值
ET1 = 0; //禁止定時(shí)器1中斷
TR1 = 1; //啟動(dòng)定時(shí)器1
ES = 1; //Enable UART1 interrupt
EA=1; //開(kāi)總中斷
}
/************************************************/
void Delay_1ms(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=122;j>0;j--);
}
復(fù)制代碼
#include"12864.h"
void display()///液晶顯示函數(shù)
{
uchar i=0;
uchar temp[14]={0};
LCD_pos(3,0);
for(i=0;i<16;i++)
write_dat(' ');
LCD_pos(3,0);
sprintf((char*)temp,"%13s",RecDate);
i=0;
while(temp[i] != '\0')
{
write_dat(temp[i]);
i++;
}
LCD_pos(1,3);
for(i=0;i<10;i++)
write_dat(' ');
LCD_pos(1,3);
}
void send_char_com(unsigned char ch) //串口1發(fā)送字節(jié)
{
SBUF=ch;
while(TI==0); //若果TI=0,循環(huán)等待
TI=0; //發(fā)送完,清零TI
}
void main() //主函數(shù)
{
uint count=0;
uchar i=0;
Timer0Init();//初始化T0
LCD_init();//初始化led
UartInit(); //初始化串口1
Uart2Init(); //初始化串口2
while(1)
{
count++;
if(count>10)
{
count=0;
}
if(recfinish==1)//串口接收到數(shù)據(jù),得到識(shí)別碼
{
recfinish=0;
TR0=0;//關(guān)閉定時(shí)器0
count_ms=0;
display();
Delay_1ms(30);
recnum2=0;// 接收數(shù)據(jù)長(zhǎng)度清零
for(i=0;i<14;i++)
RecDate[i]=0;
}
Delay_1ms(30);
}
}
/***********************************************
函數(shù)名稱(chēng):Timer0_ISR
功 能:定時(shí)器0中斷處理函數(shù)
入口參數(shù):無(wú)
返 回 值:無(wú)
備 注:無(wú)
************************************************/
void Timer0_ISR() interrupt 1 //10ms
{
TL0 = 0x00; //設(shè)置定時(shí)初值
TH0 = 0xDC; //設(shè)置定時(shí)初值
count_ms++;
if(count_ms>100)//超過(guò)1s
{
count_ms=0;
recfinish=1; //串口接收完成
}
}
/*----------------------------
UART interrupt service routine 串口接收條形碼數(shù)據(jù)
----------------------------*/
void Uart_Isr() interrupt 4 using 1
{
if (RI)
{
RI = 0; //Clear receive interrupt flag
TR0=1;//打開(kāi)定時(shí)器0
if(recnum2<13)
{
RecDate[recnum2]=SBUF;
recnum2++;
}
}
}
#ifndef _UART2_H_
#define _UART2_H_
void Uart2Init(void);
void Uart2_send_byte(unsigned char date);
void Uart2_send_string(unsigned char *p);
void Uart2Init(void) //9600bps@11.0592MHz
{
AUXR |= 0x08; //使能波特率倍速位S2SMOD:(波特率加倍)
S2CON = 0x50; //8位數(shù)據(jù),可變波特率
AUXR &= 0xFB; //獨(dú)立波特率發(fā)生器時(shí)鐘為Fosc/12,即12T
BRT = 0xFA; //設(shè)定獨(dú)立波特率發(fā)生器重裝值
AUXR |= 0x10; //啟動(dòng)獨(dú)立波特率發(fā)生器
IE2 =0x01; //開(kāi)串口2中斷 ES2=1
}
void Uart2_send_byte(unsigned char date)//串口2發(fā)送一個(gè)字節(jié)
{
IE=0 ;
S2BUF=date;
while((S2CON&0X02)==0);
{
S2CON&=~0X02; //清除發(fā)送標(biāo)志位
IE=1;
}
}
void Uart2_send_string(unsigned char *p) //串口2發(fā)送一個(gè)字符串
{
while(*p!='\0')
{
Uart2_send_byte(*p);
p++;
}
}
#endif
復(fù)制代碼
作者:
saya0769
時(shí)間:
2019-4-6 08:35
我是串口2無(wú)法接受數(shù)據(jù)
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1