2020-03-12 19:44发布
主程序部分
#include "HT66F70A.h"
#include "UART_Analog.h"
#include "sys.h"
#include "string.h"
char x[]="Hello! ";
void main()
{
UART_Init();
uchar i;
while(1)
if(RXD==0)
// for(i=0;i
// Send(x[i]);
Send(Receive());
}
模拟串口其实很简单,就是按串口的位时间发送或接收就好了。我从上世纪90年代就经常软件模拟多路全双工串 ...
嗯嗯,有点东西没有搞明白,已经解决了
最多设置5个标签!
主程序部分
#include "HT66F70A.h"
#include "UART_Analog.h"
#include "sys.h"
#include "string.h"
char x[]="Hello! ";
void main()
{
UART_Init();
uchar i;
while(1)
{
if(RXD==0)
// for(i=0;i
// Send(x[i]);
Send(Receive());
}
}
注:RXD为_pc2口,TXD为_pc3口
- #include "HT66F70A.h"
- #include "sys.h"
- void Sys_Init()
- {
- _wdtc=0xaf; //关闭看门狗
-
- /* PF2 PF5上拉输出使能 做指示灯,暂不使用 */
- _pfc2=0;
- _pfpu2=1;
- _pfc5=0;
- _pfpu5=1;
-
- /* RX:PC2 TX:PC3 */
- _pcc2=1;
- _pcc3=0;
-
-
- }
- void delay()
- {
- volatile int i=50000;
- while(i--);
- }
- [code]#include "HT66F70A.h"
- #include "UART_Analog.h"
- #include "sys.h"
- void UART_Init()
- {
- Sys_Init();
- /* 定时器装初值 */
- _tm0al=0x41;//设置波特率为9600
- _tm0ah=0x03;
- /* 工作寄存器的设定 */
- _tm0c0=0x98;//计数器暂停运行控制,时钟选择,TM总开关TnPAU=1 暂停
- _tm0c1=0xc1;//工作模式,清零条件位
-
-
- _tm3al=0x41;//设置波特率为9600
- _tm3ah=0x03;
- /* 工作寄存器的设定 */
- _tm3c0=0x98;//计数器暂停运行控制,时钟选择,TM总开关TnPAU=1 暂停
- _tm3c1=0xc1;//工作模式,清零条件位
-
- }
- void Waitting0() //等待计时器0溢出
- {
- while(!_t0af);
- _t0af=0;
- }
- void Waitting3() //等待计时器3溢出
- {
- while(!_t3af);
- _t3af=0;
- }
- int judge(char input,int j)
- {
- if(input&j)
- return 1;
- else
- return 0;
- }
- void Send(char input)
- {
- uchar i=8;
- int j=0x01;
- _t0pau=0; //开始计时
- TXD=0;
- Waitting0();
- while(i--)
- {
- TXD=judge(input,j);
- Waitting0();
- j<<=1;
- }
- TXD=1;
- Waitting0();
- _t0pau=1;
-
- _pf5=~_pf5; //指示灯
- }
- char Receive()
- {
- uchar i=8;
- char receive=0;
- _t3pau=0; //开始计时
- if(RXD==0)
- {
-
- Waitting3();
- while(i--)
- {
- if(RXD)
- receive|=0x80;
- Waitting3();
- receive>>=1;
- }
-
- Waitting3();
- if(RXD)
- _t3pau=1; //停止计时
- }
- return receive;
- }
复制代码[/code]我从上世纪90年代就经常软件模拟多路全双工串口用于工控,很好的。
嗯嗯,有点东西没有搞明白,已经解决了
一周热门 更多>