图10 程序编写界面
10、编写好程序就要进行程序的编译,单机工具栏上的“编译”,在编译的过程中,如果出现错误,修改程序直到没有错误为止,然后一次点击“编译”“调试”,在此过程中出现错误的,也要修改程序直到没有错误为止,编译过程中出现警告一般不必考虑,但特殊时期也要通过修改程序消除警告。
第五章 设计程序
第一种方式
ORG 0000H
LJMP MAIN(跳转到主程序) ORG 0100H(主程序存放地址0100H) MAIN:
MOV SP,#60H ;设置堆栈指针(设置堆栈的长度为60H byte,首先
11
SP是堆栈指针指令,将立即数60H送SP,SP=(60H),即定义栈顶位置为 内部RAM的60H单元)
ACALL DELAY( 调用delay子程序) SMRUN: ;电机控制方式为单双八拍 MOV P1,#08H ;A ACALL DELAY MOV P1,#0CH ;AB ACALL DELAY
MOV P1,#04H ;B ACALL DELAY MOV P1,#06H ;BC ACALL DELAY
MOV P1,#02H ;C ACALL DELAY
MOV P1,#03H ;CD ACALL DELAY
MOV P1,#01H ;D ACALL DELAY
MOV P1,#09H ;DA ACALL DELAY SJMP SMRUN ;循环转动 DELAY: ;延时程序
12
MOV R4,#10 DELAY1: MOV R5,#250 DJNZ R5,$
DJNZ R4,DELAY1(总延时时间:t=2*250*10=5000μs)) RET ; END
第二种方式
ORG 0000H (程序起始位置)
AJMP START (系统复位后跳转向主程序start) ORG 000BH (start的起始地址为00BH) AJMP TT1 (跳转到TT1) ORG 0030H (TT1起始地址0030H) START:
MOV P1,#0FFH (P1口置1)
MOV TMOD,#01H (设置定时器0工作方式为1即16位定时器 ) MOV R2,#08H 08H赋值给R2 MOV R1,#02H 02H赋值给R1 MOV TH0,#0D8H 定时器0高八位初值 MOV TL0,#0F0H 低八位初始值
13
ORL IE,#82H 开启中断 MOV R0,#00H 00H赋值给R0 SETB TR0 启动定时器 LOOP:
MOV A,R0 R0的内容给定时器A
MOV DPTR,#NUM DPTR为间址寄存器 MOVC A,@A+DPTR
CJNE R1,#00H,LOOP 寄存器R1的内容与0比较,不等则跳loop
MOV P1,A 累加器A中的数据传送到p1寄存器,也就是p1端口 MOV R1,#02H
INC R0 加一指令
DJNZ R2,LOOP (R2)-1放入R2,R2-1≠0 SJMP START 跳转到start
NUM:DB 0f1h,0f3h,0f2h,0f6h,0f4h,0fch,0f8h,0f9h TT1: 定时中断程序 CLR TR0 复位定时器T0
DEC R1 寄存器R1减一再放入到R1中 MOV TH0,#0D8H }定时器高八位初值 MOV TL0,#0F0H 定时器低八位初值 SETB TR0 启动定时器T0
14
RETI 中断返回 END
图4.1 主程序流程图
如图所示,在主程序中ADC0809将采集到模拟数据(即电压值,
通过改变电位器来获得不同的电压值)转换为数字量,再将此数字量传给单片机处理。单片机处理后送给数码管显示。
4.2 显示程序设计
15