⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text4.c

📁 C和ASM编写的用定时做的模拟串口程序.
💻 C
字号:
/*晶振为20MHZ*/
/*定时也好用波特率为38400;;; 延时好用,波特率为38400*/
#include <reg51.h>
#include<intrins.h>
sbit BT_SND =P1^0;
sbit BT_REC =P1^1;
unsigned char bdata senddat,revedat;
unsigned char retudata; 

sbit senddat0= senddat^0;
sbit senddat1= senddat^1;
sbit senddat2= senddat^2;
sbit senddat3= senddat^3;
sbit senddat4= senddat^4;
sbit senddat5= senddat^5;
sbit senddat6= senddat^6;
sbit senddat7= senddat^7;

sbit revedat0= revedat^0;
sbit revedat1= revedat^1;
sbit revedat2= revedat^2;
sbit revedat3= revedat^3;
sbit revedat4= revedat^4;
sbit revedat5= revedat^5;
sbit revedat6= revedat^6;
sbit revedat7= revedat^7;

void delay(unsigned int del)
{
for(del;del>0;del--);


}
 
//发送一个字符
void PSendChar(unsigned char inch)
{
 senddat=inch;
 BT_SND=0; //start bit 
 delay(30);
 BT_SND=senddat0; //先送出低位
 delay(30);
 BT_SND=senddat1; 
 delay(30);
 BT_SND=senddat2; 
 delay(30);
 BT_SND=senddat3; 
 delay(30);
 BT_SND=senddat4; 
 delay(30);
 BT_SND=senddat5; 
 delay(30);
 BT_SND=senddat6; 
 delay(30);
 BT_SND=senddat7; 
 delay(30);
 BT_SND=1; 
 delay(30);
}

//接收一个字符
unsigned char PGetChar()
{
 delay(30);
 revedat0=BT_REC;
 delay(30);
 revedat1=BT_REC;
 delay(30);
 revedat2=BT_REC;
 delay(30);
 revedat3=BT_REC;
 delay(30);
 revedat4=BT_REC;
 delay(30);
 revedat5=BT_REC;
 delay(30);
 revedat6=BT_REC;
 delay(30);
 revedat7=BT_REC;
 delay(30);
 while(!BT_REC);
 return (revedat);
}


//检查是不是有起始位
bit StartBitOn()
{
return (BT_REC==0);

}

void INT_int0() interrupt 0
{
 EX0=0;
 while(!StartBitOn());
 retudata=PGetChar();
 PSendChar(retudata);
 EX0=1;
}




void main()
{
unsigned char i,j;
/*TMOD=0x22; /*定时器1为工作模式2(8位自动重装),0为模式2(8位自动重装) 
TR0=0; //在发送或接收才开始使用
TH0=(256-43); //38400bps 就是 1000000/38400=26微秒 
//执行的timer是
//26*20/12=43
TL0=TH0;
 */
EA=1;
EX0=1;
IT0=1;
BT_SND=1;
BT_REC=1;
for(j=0;j<=20;j++)
for(i=0;i<=250;i++)
{
PSendChar(i);
}
while(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -