关于51单片机汇编的问题

来源:百度知道 编辑:UC知道 时间:2024/09/25 19:16:44
我想用单片机产生一个正弦信号
单片机P0到P7接到ADC0832上面
单片机程序如下
ORG 00H
LJMP MAIN
ORG 0100H
MAIN:
MOV DPTR,#sinTab
LOOP:
CLR A
MOVC A,@A+DPTR
CJNE A,#129,LOOP1
AJMP MAIN
LOOP1:
MOV P3,A
INC DPTR
AJMP LOOP
sinTab:DB 128,132,137,141,146,150,154,159,163,167
正弦表我就只打一排,太长了。
这段程序大概意思是,每次从正弦表区一个数
然后传送到io口,是吧?
我想知道是哪个语句将信号输出.
是从哪个io口输出的.
回答满意一定追加重谢!!!
初学者,请解答详细,谢谢

ORG 00H ;伪指令起始地址为00H
LJMP MAIN ;长跳转至MAIN标号处地址
ORG 0100H ;此条被跳过
MAIN: ;MAIN标号
MOV DPTR,#sinTab ;正弦表入口地址存入数据指针
LOOP: ;LOOP标号
CLR A ;累加器A清零
MOVC A,@A+DPTR ;地址为(累加器A内所存数据+数据指针两数之和)空间内正弦表数值载入累加器A
CJNE A,#129,LOOP1 ;比较不为零跳转至LOOP1标号地址处执行
AJMP MAIN ;若为零跳转至MAIN处运行
LOOP1: ;LOOP1标号
MOV P3,A ;向P3口输出A中当前载入的一个正弦表值
INC DPTR ;数据指针自加,指向正弦表中下一位数据的地址
AJMP LOOP ;控制循环跳转至LOOP处再次执行
sinTab:DB 128,132,137,141,146,150,154,159,163,167

除了每一条指令的原理以外,由“CJNE A,#129,LOOP1”可知此时正弦表中由129个数据,执行到数据表中最后一位时,CJNE指令不再跳转,而是顺序执行,下一条AJMP MAIN指令,跳回MAIN标号处执行下一周期正弦波。

希望我的答案对你有用,我也是初学者。

MAIN:
MOV DPTR,#sinTab
LOOP:
CLR A
MOVC A,@A+DPTR ;在此查表得电压值
CJNE A,#129,LOOP1 ;129应该是表中最后一个数
AJMP MAIN
LOOP1:
MOV P3,A ;在此输出 ,从p3输出
INC DPTR
AJMP LOOP

LOOP1:
MOV P3,A
每个循环便把把A中的内容数据传给P3口,传送129个数据后,便返回进入主程序重新开始,你好好看看,一定能弄明白的