这样的最简单的单片机串行通信试验小程序是否正确,如果错误还请赐教

来源:百度知道 编辑:UC知道 时间:2024/05/09 07:48:08
org 0000h
start:mov scon,#00h;串行初始化
mov a,#f9h;数码管显示数字1的十六进制代码
mov sbuf,a;
end

硬件电路的连接是:单片机的P3.0脚接到74LS164的串入端
单片机的P3.1脚接到74LS164的时钟端
74LS164的8位输出端接到数码管的8个管脚

理论上要求这段程序能在数码管上显示一个数字1
请问这段程序能不能实现这样的要求?

1、主程序入口至少是0030H,前面的地址是中断入口,不得占用。
2、立即数的表示,十六进制应为#0f9h
3、程序没有结尾,送完数后做什么去?
4、注释前的分号不用全角,会引起编译错误
5、数码管应是共阳的

程序如下:
org 0000h
ljmp start
org 0030h
start: mov scon,#00h; 串行初始化
mov a,#0f9h; 数码管显示数字1的十六进制代码
mov sbuf,a
LOOP: AJMP LOOP
end

其实程序不一定非要从0030H开始,只是我们真正要做的程序会用到很多东西,要养成良好的编程习惯

程序这样改
org 0000h
ljmp start;
org 1000h
start:mov scon,#00h;串行初始化
mov a,#f9h;数码管显示数字1的十六进制代码
mov sbuf,a;
end

原来的程序下载到片中后的位置是从0000h开始,前三个字节的命令没有跳到主程序,并占用了中断的程序入口,其实程序根本没有被执行.
把主程序换个位置,在0000h位置上写一条指令跳到主程序,保证程序执行

只是让单片机运行一个程序,中断都没用到,为什么还非要去0030位置?就直接从0000开始写了有什么不可以吗?

书上不是有现存的吗,去看看就行了.STC网站上也有.
在end前还要加一句,sjmp $,否则程序一下子就跑完了,你根本就看不到现象.

堆栈也没有初始化啊?