?? uart0.c
字號:
//UART0.c
//uart0 相關程序
#include "mytype.h"
#include "config.h"
#include<ds89c4xx.h>
//extern uint8 xdata *pt;
//uint8 sending;
uint8 code HexTable[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
void UartInit0(void) //8位數據位,1位停止位,無校驗,波特率uartbuadrate
{
//EA = 0;
TMOD &= 0x0F;
TMOD |= 0x20; //定時器1工作在模式2
SCON0 = 0x50; //串口工作在方式1
PCON |= 0x80; //smod = 1;
TH1 = 256 - ((fosc/12)/16)/uart0baudrate; //根據波特率計算定時器初值
TL1 = 256 - ((fosc/12)/16)/uart0baudrate;
ES0=0; //串行中斷允許=0
TR1=1; //啟動定時器1
TI_0 = 0; //
RI_0 = 0;
REN_0=1; //允許接收
//IP1 = 0x50;
//IP0 = 0x40; //PORT1優先級3,PORT0優先級2
//EA=1; //允許中斷
}
void PutChar0(uint8 send) //發送一個字節的數據
{
SBUF0 = send;
while(0 == TI_0) ;
TI_0 = 0; //TI_0 = 1,發送完成,再清0
}
void PutString0(uint8 *psend, uint8 idata length) //發送字符串,以字符串長度或'\0'結束
{
while(length--)
{
PutChar0(*psend);
psend++;
if(*psend == '\0')
return;
}
}
void PutUint320(uint32 idata send,uint8 idata shuzhi) //將32位的無符號數通過UART發送
{
uint8 idata buffer[10];
int8 idata i;
for(i=9;i>=0;i--)
{
buffer[i] = send%shuzhi + '0'; //轉換成ASCII碼
send = send/shuzhi;
}
for(i=0;i<=9;i++)
{
if(buffer[i] != '0')
break;
}
if(10 == i)
i = 9; //如果傳入為0,則至少顯示一個0
for( ;i<=9;i++)
{
PutChar0(buffer[i]);
}
}
void PutHex0(uint8 idata send) //將8位無符號數轉換成16進制后發送
{
PutChar0('0');
PutChar0('x');
PutChar0(HexTable[(send >> 4)]);
PutChar0(HexTable[(send & 0x0f)]);
PutChar0(' ');
}
/*void PutHex16bit0(uint16 send)
{
PutChar0('0');
PutChar0('x');
PutChar0(HexTable[(send >> 12)]);
PutChar0(HexTable[((send >> 8) & 0x0f)]);
PutChar0(HexTable[((uint8)send) >> 4]);
PutChar0(HexTable[(uint8)send & 0x0f]);
PutChar0(' ');
} */
void NextLine0(void) //換行
{
PutChar0(0x0d);
PutChar0(0x0a);
}
void UART0_ISR(void) interrupt 4 //uart 中斷程序
{
//uint8 temp;
if(RI_0 == 1) //收到數據
{
RI_0 = 0; //清中斷請求
//temp = SBUF0;
}
else //發送完一字節數據
{
TI_0 = 0;
//sending = 0; //清發送標志
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -