我用C语言写了个程序,但是这里要求不用标准串口发送数据,而是用模拟串口的方式发送数据。波特率是38400,所以对精度要求比较高。直接用C51写,我担心不行,所以我打算用汇编,因为汇编清晰,一目了然,对时间的控制非常精确。但是该如何嵌入汇编呢?下面是我的子程序:
//以下是宏定义的一部分
#define uchar usigned char
sbit BUSY=P3^0//定义恒嵌科技VLCM-12864忙信号口
sbit TRX=P3^1//定义串口发送信号口线
//以下是发送数据的子函数
void send_byte(uchar a)//通过串口发送一字节数据
{
uchar i;
i=8;//需要发送的位数
while(~BUSY);//BUSY==1是“恒嵌VLCM-12864”表示允许接受,反之不允许接收
while(i--)
{
TRX=a&0x01;//取其最低位放到模拟串口线
TR0=1;//打开定时器
while(TR0);//定时器0中断服务程序中只是把TR0置0,所以检测TR0是否为0,以判断是否到点
a>>=1;//右移一位
}
}
我如果想在子函数 void send_byte(uchar a)内部嵌入汇编程序,该怎么办呢?上网搜索了一些信息,也很乱,不知所云,在此有请高手给出一些建议……
我想嵌入以下汇编程序:
SEND_BYTE:
PUSH PSW
JNB TX_IO, $;检测忙信号
CLR C ;->发送起始位
MOV TX_IO, C
SETB TR0
JB TR0, $;-<
RRC A ;->发送第一位
MOV TX_IO, C
SETB TR0
JB TR0, $;-<
RRC A ;->发送第二位
MOV TX_IO, C
SETB TR0
JB TR0, $;-<
RRC A ;->发送第三位
MOV TX_IO, C
SETB TR0
JB TR0, $;-<
RRC A ;->发送第四位
MOV TX_IO, C
SETB TR0
JB TR0, $;-<
RRC A ;->发送第五位
MOV TX_IO, C
SETB TR0
JB TR0, $;-<
RRC A ;->发送第六位
MOV TX_IO, C
SETB TR0
JB TR0, $;-<
RRC A ;->发送第七位
MOV TX_IO, C
SETB TR0
JB TR0, $;-<
RRC A ;->发送第八位
MOV TX_IO, C
SETB TR0
JB TR0, $;-<
SETB C ;->发送终止位
MOV TX_IO, C
SETB TR0
JB TR0, $;-<
POP PSW
RET |