音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(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ī)
各位DX,能否貼幾個IO口模擬串口的c語言程序啊
謝謝。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

2樓: >>參與討論
雁舞白沙
可以到我這里來看看
http://www.glorywork.com

點擊這里進(jìn)入

3樓: >>參與討論
huangxd
在網(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);
        }
    }
}


參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請教大蝦:怎么利用51的待機(jī)工作方式
求助: 現(xiàn)在市場上GPS模塊行情
想自己做一套單片機(jī)試驗板,不知如何入手,請各位指點,謝謝!
modbus是發(fā)送的字符類型是什么?
關(guān)于特殊電平轉(zhuǎn)換的問題
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號