AT89S52串口程序
生活随笔
收集整理的這篇文章主要介紹了
AT89S52串口程序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/***************************************
*函數:main.c
*描述:
* ? ? ?串口通訊協議標準測試:發送01234567
*時間:
*編寫:
*版本:V1.0
****************************************/
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#define uchar unsigned char?
#define uint unsigned int
#define FSOC 11059200L ? ?//晶振
#define BAUD ?9600 ? ? ? ?//波特率
uchar RevBuf; ? ?//保存串口接收到的數據,數據緩沖區
void SerialInit(void) ? //串口初始化
{
? ? EA = 0;
? ? SCON = 0x50; ? //SCON0:mode0,8-Bit,UART,Enable RXD
? ? PCON |= 0x80; ? //SMOD00 =1;
? ? TMOD = 0x20 ; ? //TMOD:timer1,mode2,8-bit relaod
? ? TH1 = -(FSOC/BAUD/12/16); ? //set Timer1 reload value for baudrate
? ? TL1 = -(FSOC/BAUD/12/16); ? //set Timer1 reload value for baudrate
? ? TR1 =1;//start Timer1
? ? //ES = 1; ?//enable UART0 interupt
? ? EA = 1;
}
/*
//Reeive Char "串口中斷方式接受數據"
//功能:接收到數據之后再發回去
void UART_INTR_SVC(void)interrupt 4 using 3
{
? ? if(RI==1)
? ? ? ? {
? ? ? ? ? ? RI =0;
? ? ? ? ? ? RevBuf =SBUF;
? ? ? ? ? ? SBUF = RevBuf;
? ? ? ??
? ? ? ? }
? ? else
? ? ? ? {
? ? ? ? ? ? TI = 0;
? ? ? ? }
}
*/
void main(void)
{
? ? uchar m,n; ? ? ? //定義循環變量
SerialInit(); ?//初始化串口
//send('a');?
? ? for(m=0;m<10;m++)
? ? ? ? {
? ? ? ? ? ? SBUF = m+0x30;
? ? ? ? ? ? while(TI!=1);
? ? ? ? ? ? TI=0;
? ? ? ? } ? ?//向電腦發送數據0123456789
? ??
? ? SBUF = 0x0A; ? //換行符號的ASCII碼
? ? while(TI!=1);
? ? TI=0;
? ? for(n=0;n<10;n++)
? ? ? ? {
? ? ? ? ? ? SBUF = 0x40; ? //@的ASCII碼
? ? ? ? ? ? while(TI!=1);
? ? ? ? ? ? TI=0;
? ? ? ? }?
? ? ? ? ?
? ? SBUF = 0x0A;
? ? while(TI!=1);
? ? TI=0;
? ? for(;;)
? ? ? ? {
? ? ? ? ? ? while(RI!=1);
? ? ? ? ? ? RI=0;
? ? ? ? ? ? RevBuf = SBUF; ? //查詢方法接收數據
? ? ? ? ? ? SBUF = RevBuf; ? //原數據發回
? ? ? ? ? ? while(TI!=1);
? ? ? ? ? ? TI=0;
? ? ? ? }
}
*函數:main.c
*描述:
* ? ? ?串口通訊協議標準測試:發送01234567
*時間:
*編寫:
*版本:V1.0
****************************************/
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#define uchar unsigned char?
#define uint unsigned int
#define FSOC 11059200L ? ?//晶振
#define BAUD ?9600 ? ? ? ?//波特率
uchar RevBuf; ? ?//保存串口接收到的數據,數據緩沖區
void SerialInit(void) ? //串口初始化
{
? ? EA = 0;
? ? SCON = 0x50; ? //SCON0:mode0,8-Bit,UART,Enable RXD
? ? PCON |= 0x80; ? //SMOD00 =1;
? ? TMOD = 0x20 ; ? //TMOD:timer1,mode2,8-bit relaod
? ? TH1 = -(FSOC/BAUD/12/16); ? //set Timer1 reload value for baudrate
? ? TL1 = -(FSOC/BAUD/12/16); ? //set Timer1 reload value for baudrate
? ? TR1 =1;//start Timer1
? ? //ES = 1; ?//enable UART0 interupt
? ? EA = 1;
}
/*
//Reeive Char "串口中斷方式接受數據"
//功能:接收到數據之后再發回去
void UART_INTR_SVC(void)interrupt 4 using 3
{
? ? if(RI==1)
? ? ? ? {
? ? ? ? ? ? RI =0;
? ? ? ? ? ? RevBuf =SBUF;
? ? ? ? ? ? SBUF = RevBuf;
? ? ? ??
? ? ? ? }
? ? else
? ? ? ? {
? ? ? ? ? ? TI = 0;
? ? ? ? }
}
*/
void main(void)
{
? ? uchar m,n; ? ? ? //定義循環變量
SerialInit(); ?//初始化串口
//send('a');?
? ? for(m=0;m<10;m++)
? ? ? ? {
? ? ? ? ? ? SBUF = m+0x30;
? ? ? ? ? ? while(TI!=1);
? ? ? ? ? ? TI=0;
? ? ? ? } ? ?//向電腦發送數據0123456789
? ??
? ? SBUF = 0x0A; ? //換行符號的ASCII碼
? ? while(TI!=1);
? ? TI=0;
? ? for(n=0;n<10;n++)
? ? ? ? {
? ? ? ? ? ? SBUF = 0x40; ? //@的ASCII碼
? ? ? ? ? ? while(TI!=1);
? ? ? ? ? ? TI=0;
? ? ? ? }?
? ? ? ? ?
? ? SBUF = 0x0A;
? ? while(TI!=1);
? ? TI=0;
? ? for(;;)
? ? ? ? {
? ? ? ? ? ? while(RI!=1);
? ? ? ? ? ? RI=0;
? ? ? ? ? ? RevBuf = SBUF; ? //查詢方法接收數據
? ? ? ? ? ? SBUF = RevBuf; ? //原數據發回
? ? ? ? ? ? while(TI!=1);
? ? ? ? ? ? TI=0;
? ? ? ? }
}
總結
以上是生活随笔為你收集整理的AT89S52串口程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新一代电子书汇总介绍,想入手了
- 下一篇: 网上购物要小心