看代码是asm版本的,大家/自己理解起来诸多不便,于是转换成c语言版本之后再理解了,利己达人!
注意:为了便于大家查看。所有的空格就转给不可见字符了。20 20 20 20 转 a1 a1 a1 a1
请大家下载附件中的代码编译,请勿直接复制!//
http://hi.baidu.com/crsaw/blog/item/54c8cc01e51cb68fe850cd8f.html//
// mc145162控制代码汇编源程序
// 2009年04月28日 04:13
// 一中频: 10.7mhz,超外差式接收,参考晶体:10.240mhz,步距:5khz
// tx参考频率=10.240mhz÷(512×4),rx参考频率=10.240mhz÷2048
// 控制字传输方式:串行输入,高位在前(adin=vss),mcu时钟:12mhz
// ----------------------------------------------------------------
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char // one byte
uchar tx_byth = 0;
uchar tx_bytl = 0;
uchar rx_byth = 0;
uchar rx_bytl = 0;
uchar i = 0;
sbit clk = p1^0;
sbit din = p1^1;
sbit enb = p1^2;
// 2009-12-2 14:07 函数声明
void initial(void);
void mcsend(uchar temp);
void mc5162(void);
void set_rtx(void);
// ----------------------------------------------------------------
void main(void)
{
sp = 0x5f; // 设置堆栈指针
initial(); // 系统初始化
mc5162(); // 初始化mc145162
set_rtx (); // 发送频率控制字
enb = 0; // 锁存
while(1)
{
;
}
}
// ----------------------------------------------------------------
// 收/发频率控制字发送子程序
void set_rtx(void)
{
mcsend(tx_byth); // 先发送tx控制字
mcsend(tx_bytl);
mcsend(rx_byth); // 再发送rx控制字
mcsend(rx_bytl);
enb = 1; // enb置1
_nop_();_nop_(); // 到延时并返回
}
// ---------------------------------
// 初始化mc145162控制寄存器子程序
void mc5162(void)
{
enb = 1; // 状态控制寄存器(8bit)
mcsend(0x80); // 调用串行发送子程序
enb = 0; // 锁存
_nop_();_nop_(); // 稍延时
enb = 1; // 参考频率控制寄存器(32bit)
mcsend(0x62); // tx=fr2→d,tx0=1,rx0=0
mcsend(0x00); // tx参考频率z
mcsend(0x88); // rx=fr1→b
mcsend(0x00); // 本振参考
enb = 0; // 锁存
_nop_();_nop_();
}
// ---------------------------------
// 向mc145162发送控制字子程序
void mcsend(uchar temp)
{
// 发送8bit 已发送8bit?否,继续
for(i=0;i<8;i++)
{
// 高位在前,输出1bit
if(temp&0x80)
{
// c→din
din = 1;
}
else
{
din = 0;
}
_nop_();
clk = 1;
_nop_();_nop_();
clk = 0;
temp <<= 1;
}
_nop_();_nop_();
// 是,返回
}
// ----------------------------------------------------------------
// 系统初始化子程序
void initial(void)
{
p1 = 0xf8; // 初始化p1端口
tx_byth = 0x17; // 发射29.600mhz(5920×5)
tx_bytl = 0x20;
rx_byth = 0x1f; // 本振40.300mhz(8060×5)
rx_bytl = 0x7c;
}
// ----------------------------------------------------------------