📄 io_uart.c
字号:
void Init_IO_Uart(void);
void IO_PutChar(char tmpchar);
void IO_PutString(const char *Name2);
__interrupt void ReloadTimer1(void);
#define IO_SOT PDR1_P17
#define IO_SOT_D DDR1_D17
typedef unsigned char BYTE ;
typedef unsigned int WORD ;
typedef unsigned long DOUBLEWORD;
typedef long LONGWORD ;
typedef union{
BYTE byte;
struct{ BYTE B0:1; BYTE B1:1; BYTE B2:1; BYTE B3:1;
BYTE B4:1; BYTE B5:1; BYTE B6:1; BYTE B7:1; }bit;
}TYPE_FLAG,TYPE_BIT8;
unsigned char UartFlag;
TYPE_BIT8 UartChar;
void Init_IO_Uart(void)
{
IO_SOT_D = 1; IO_SOT = 1;
UartFlag = 10;
// initialise reload timer 1
TMRLR1 = 52; // set reload value , BPS 9600 = 104uS = 52*2uS
TMCSR1 = 0x81B; // prescaler 2us at 16 MHz
}
/* Reload Timer 1 */
__interrupt void ReloadTimer1(void)
{
// UartFlag 0 1 2 3 4 5 6 7 8 9 10
// IO_SOT----\_/xxxxxxxxxxxxxxx-----
// UartChar bit 0 1 2 3 4 5 6 7
//
switch(UartFlag) {
case 10: IO_SOT = 1; break;
case 0: IO_SOT = 1; UartFlag++; break;
case 1: IO_SOT = 0; UartFlag++; break;
case 2: case 3: case 4: case 5:
case 6: case 7: case 8: case 9:
if(UartChar.bit.B0) IO_SOT = 1;
else IO_SOT = 0;
UartChar.byte >>=1; UartFlag++;
break;
default: IO_SOT = 1; UartFlag=10;break;
}
TMCSR1_UF = 0;
}
void IO_PutChar(char tmpchar)
{
while(UartFlag!=10);
UartChar.byte = tmpchar; UartFlag = 0;
}
void IO_PutString(const char *Name2) /* Puts a String to UART */
{
char c;
int i,len;
len = strlen(Name2);
for (i=0; i<len; i++) { c=(Name2[i]); IO_PutChar(c); }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -