?? uart.c
字號:
#include <reg51.h>
#include <string.h>
#include "uart.h"
#include "myfun.h"
/**************************************************************************
- 功能描述:51單片機的串口初始化
- 隸屬模塊:STC51串口操作
- 函數屬性:外部,使用戶使用
- 參數說明:無
- 返回說明:無
- 注:振南的很多產品均采用串口來進行操作,所以正確的初始化串口十分重要
**************************************************************************/
void UART_Init()
{
PCON =0x00; //PCON的最高位SMOD=1時波特率加倍
TMOD=0x20; //時器1為方式2 初值自動裝入 產生波特率
TH1=0xfd; //定時器初始為0XFd,晶振為12MHz,本函數實際產生的波特率為9600bps
TL1=0xfd; //同上
SCON=0x50; //串口設置為方式1,REN=1,允許接收
TR1=1; //啟動定時器1
ES=1; //使能串口接收中斷,
EA=1; //打開所有中斷
}
/**************************************************************************
- 功能描述:51單片機的串口中斷處理函數
- 隸屬模塊:STC51串口操作
- 函數屬性:外部,使用戶使用(在此中斷函數中常用來處理從串口收到的數據)
- 參數說明:無
- 返回說明:無
- 注:振南的很多產品,都是配合“超級終端”來進行演示的,在“超級終端”中
敲入的命令就是從計算機的串口發出,由單片機從串口接收,接收到的串口
數據就在此中斷函數中進行處理,完成命令接收及處理、命令解析等工作。
**************************************************************************/
void sio_int() interrupt 4 using 3 //串口中斷函數
{
ES=0;
//串口中斷處理
/*
if(RI)
{
if(SBUF!=0x08) //如果接收到的是退格(ASCII碼為0x08)
cmd_buf[counter++]=SBUF;
else
counter--;
RI=0;
}
if(SBUF==0x0d)
{
cmd_buf[counter-1]=0;
counter=0;
flag=1;
}
*/
ES=1;
}
/**************************************************************************
- 功能描述:51單片機的串口發送字節的函數
- 隸屬模塊:STC51串口操作
- 函數屬性:外部,使用戶使用
- 參數說明:mydata:要發送的一個字節
- 返回說明:無
- 注:發送一個字節,是串口發送的基礎操作
**************************************************************************/
void UART_Send_Byte(unsigned char mydata)
{
ES=0;
TI=0;
SBUF=mydata;
while(!TI);
TI=0;
ES=1;
}
/**************************************************************************
- 功能描述:51單片機的串口發送0d 0a ,即回車換行
- 隸屬模塊:STC51串口操作
- 函數屬性:外部,使用戶使用
- 參數說明:無
- 返回說明:無
- 注:此函數就是發送0d 0a這兩個字節,在“超級終端”上會有回車換行的效果
**************************************************************************/
void UART_Send_Enter()
{
UART_Send_Byte(0x0d);
UART_Send_Byte(0x0a);
}
/**************************************************************************
- 功能描述:51單片機的串口發送字符串
- 隸屬模塊:STC51串口操作
- 函數屬性:外部,使用戶使用
- 參數說明:s:指向字符串的指針
- 返回說明:無
- 注:如果在字符串中有'\n',則會發送一個回車換行
**************************************************************************/
void UART_Send_Str(char *s)
{
int len=strlen(s)-1;
int i;
for(i=0;i<len;i++)
UART_Send_Byte(s[i]);
if(s[i]=='\n')
{
UART_Send_Enter();
}
else
{
UART_Send_Byte(s[i]);
}
}
/**************************************************************************
- 功能描述:51單片機的串口發送數值
- 隸屬模塊:STC51串口操作
- 函數屬性:外部,使用戶使用
- 參數說明:dat:要發送的數值
- 返回說明:無
- 注:函數中會將數值轉為相應的字符串,發送出去。比如 4567 轉為 "4567"
**************************************************************************/
void UART_Put_Num(unsigned long dat)
{
char temp[20];
u32tostr(dat,temp);
UART_Send_Str(temp);
}
/**************************************************************************
- 功能描述:51單片機的串口發送調試信息
- 隸屬模塊:STC51串口操作
- 函數屬性:外部,使用戶使用
- 參數說明:inf:指向提示信息字符串的指針
dat:一個數值,前面的提示信息就是在說明這個數值的意義
- 返回說明:無
- 注:此函數在振南的工程中會經常看到,是方便調試用的
**************************************************************************/
void UART_Put_Inf(char *inf,unsigned long dat)
{
UART_Send_Str(inf);
UART_Put_Num(dat);
UART_Send_Str("\n");
}
/*
void binary(unsigned char dat)
{
unsigned char i;
unsigned char a[17];
for(i=0;i<8;i++)
{
a[i]=((dat<<i)&0x80)?'o':' ';
}
a[i]=0;
for(i=0;i<strlen(a);i++)
{
UART_Send_Byte(a[i]);
UART_Send_Byte(' ');
}
}
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -