|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
各位DX,能否貼幾個IO口模擬串口的c語言程序啊 |
| 作者:huangxd 欄目:單片機(jī) |
謝謝。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 |
| 2樓: | >>參與討論 |
| 作者: 雁舞白沙 于 2005/3/30 15:34:00 發(fā)布:
可以到我這里來看看 http://www.glorywork.com |
|
| 3樓: | >>參與討論 |
| 作者: huangxd 于 2005/3/30 16:44:00 發(fā)布:
在網(wǎng)上找了一個,就是不知道MODE_QUICK什么意思? 因為不知道MODE_QUICK是什么意思?所以還是用不了 #include <reg51.h> sbit BT_SND =P1^0; sbit BT_REC =P1^1; /********************************************** IO 口模擬232通訊程序 使用兩種方式的C程序 占用定時器0 **********************************************/ #define MODE_QUICK #define F_TM F0 #define TIMER0_ENABLE TL0=TH0; TR0=1; #define TIMER0_DISABLE TR0=0; sbit ACC0= ACC^0; sbit ACC1= ACC^1; sbit ACC2= ACC^2; sbit ACC3= ACC^3; sbit ACC4= ACC^4; sbit ACC5= ACC^5; sbit ACC6= ACC^6; sbit ACC7= ACC^7; void IntTimer0() interrupt 1 { F_TM=1; } //發(fā)送一個字符 void PSendChar(unsigned CHAR inch) { #ifdef MODE_QUICK ACC=inch; F_TM=0; BT_SND=0; //start bit TIMER0_ENABLE; //啟動 //先送出低位 while(!F_TM); BT_SND=ACC0; F_TM=0; while(!F_TM); BT_SND=ACC1; F_TM=0; while(!F_TM); BT_SND=ACC2; F_TM=0; while(!F_TM); BT_SND=ACC3; F_TM=0; while(!F_TM); BT_SND=ACC4; F_TM=0; while(!F_TM); BT_SND=ACC5; F_TM=0; while(!F_TM); BT_SND=ACC6; F_TM=0; while(!F_TM); BT_SND=ACC7; F_TM=0; while(!F_TM); BT_SND=1; F_TM=0; while(!F_TM); TIMER0_DISABLE; //停止timer #else unsigned CHAR ii; ii=0; F_TM=0; BT_SND=0; //start bit TIMER0_ENABLE; //啟動 while(!F_TM); while(ii<8) { if(inch&1) { BT_SND=1; } else { BT_SND=0; } F_TM=0; while(!F_TM);ii++; inch>>=1; } BT_SND=1; F_TM=0; while(!F_TM); #endif TIMER0_DISABLE; //停止timer } //接收一個字符 unsigned CHAR PGetChar() { #ifdef MODE_QUICK TIMER0_ENABLE; F_TM=0; while(!F_TM); //等過起始位 ACC0=BT_REC; TL0=TH0; F_TM=0; while(!F_TM);ACC1=BT_REC;F_TM=0; while(!F_TM);ACC2=BT_REC;F_TM=0; while(!F_TM);ACC3=BT_REC;F_TM=0; while(!F_TM);ACC4=BT_REC;F_TM=0; while(!F_TM);ACC5=BT_REC;F_TM=0; while(!F_TM);ACC6=BT_REC;F_TM=0; while(!F_TM);ACC7=BT_REC;F_TM=0; while(!F_TM) { if(BT_REC) { break; } } TIMER0_DISABLE; //停止timer return ACC; #else unsigned CHAR rch,ii; TIMER0_ENABLE; F_TM=0; ii=0; rch=0; while(!F_TM); //等過起始位 while(ii<8) { rch>>=1; if(BT_REC) { rch|=0x80; } ii++; F_TM=0; while(!F_TM); } F_TM=0; while(!F_TM) { if(BT_REC) { break; } } TIMER0_DISABLE; //停止timer return rch; #endif } //檢查是不是有起始位 bit StartBitOn() {return (BT_REC==0);} void main() { unsigned CHAR gch; TMOD=0x22; /*定時器1為工作模式2(8位自動重裝),0為模式2(8位自動重裝) */ PCON=00; TR0=0; //在發(fā)送或接收才開始使用 TF0=0; TH0=(256-96); //9600bps 就是 1000000/9600=104.167微秒 執(zhí)行的timer是 // 104.167*11.0592/12= 96 TL0=TH0; ET0=1; EA=1; PSendChar(0x55); PSendChar(0xaa); PSendChar(0x00); PSendChar(0xff); while(1) { if(StartBitOn()) { gch=PGetChar(); PSendChar(gch); } } } |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |