1、单片机编程:随时查阅指令表,存储器结构,哪些可以让用户使用?特殊功能区的地址,位地址?常用指令:所有控制类指令(子程序调用,跳转,位查询,减一不为 0 跳转,比较不相等跳转等) ,查表指令,MOVX,查询指令,位操作指令。熟悉中断设置,定时器串口的设置。程序中灵活设置标号,可以很方便控制程序转移;设置标志,适用于需要判断的场合,两种情况,使用查询指令跳转到相应处理程序设置计数器,计数进中断的次数?计数发送接收数据的个数?计数当前显示哪一位 LED?设置寄存器,用于存储特殊的变量。具体包括:1 延时;2 定时,定时输出,定时采集,定时查询等3 查询,按键查询,标志查询4 动态 led,查表法5
2、AD0809,DA0832 应用6 串口,存储器读写等。1 延时:软件延时,常用于精度要求不高的情况,如按键延时消抖,等待 AD 转换,延时显示等;常用多重循环结构12MHz 晶振时,一个机器周期为 1sDEL: MOV R7,#200DEL1: MOV R6,#125DEL2: DJNZ R6,DEL2 ;125*2=250sDJNZ R7,DEL1 ;0.25ms*200=50msRET还可以在延时程序下加一次 DJNZ R5, DELAY 指令2 定时,定时输出,例如方波输出;定时采集,定时查询等,在中断中,启动 AD 转换并读结果,存储,并为下一次采集准备。A 牢记定时公式,设置方法:
3、中断设置,定时方式设置,启动定时。例:晶振为 6M,编写程序,要求使用 T0,采用方式 2 定时,在 P1。0 输出周期为 400 微秒,占空比为 1:10 的矩形脉冲ORG 0000HAJMP MAIN;主程序入口ORG 000BH;中断入口AJMP PT0ORG 0100HMAIN: MOV R2,#00H; 计数器清零MOV TMOD,#02H;定时;方式 2MOV TH0,#0ECH; 初值 =236;MOV TL0,#0ECHSETB P1.0SETB TR0;启动计数SETB ET0SETB EA;开中断HERE: SJMP HERE;等待PT0: CJNE R2,#09H,PT0
4、1SETB P1.0MOV R2,#00HRETIPT01: CLR P1.0INC R2RETIEND B 秒表,计数程序实现:如何实时显示时钟?动态 LED 显示每一位需要 20ms 左右延时,否则会闪烁,用定时器做 20ms,50 次为 1s,时间累加思路同上,但是,在每一次中断中,完成时间的累加和显示一位!C 定时 AD 采集?定时周期近似为采样周期,在定时中断中启动 AD,并读结果,存储,准备下一次转换。D 测量频率,周期?1. 使用 GATE 位测量脉冲宽度,只能测高电平持续时间,有些情况下高低电平时间不同,但此方法编程简单。2测周法:适用于被测频率较低时。测周法是在被测转速信号的
5、一个周期内,计数内部计数器的时钟脉冲数。下图为测周法原理图。思路:被测信号接外中断,第一次进入外中断,启动计数器,第二次进入外中断,停止计数,并读计数器值,关中断。问题:如何判断是第一次进入还是第二次进入?设置标志若周期很大,定时器溢出怎么办?定时中断设置计数器,重新计数,外中断优先级高。若周期很小,此方式误差越大。3 测频法:适用于被测频率较高时。测频法是在一定时间间隔内,计数信号的脉冲数 N,下图为测频法原理图:思路:定时器 0 做定时时间,定时器 1 为计数方式引脚接被测信号,启动定时器 0 同时启动定时器 1,定时 0 中断时读定时器 1。要求被测信号周期要小于机器周期,否则定时器 1
6、 先溢出,一般都能满足要求。当被测信号周期较大时误差越大。具体在测频时,要先大概知道被测频率范围才能选择方法,若频率变化范围大,还可以采用设置门限的测频侧周切换法。3 查询。查询标志,用 JB,JNB,查询寄存器的值,用CJNE 指令第几次进入中断?寄存器的值,做计数器,自己设定寄存器。例如时钟,用 3 个寄存器存储分秒时分别为 ABC,定时做100ms,设置计数器,进中断一次加 1,计数器满 10,清零并给 C 加 1,C 满 60?CJNZ ,给 B 加 1,B 满 60?。 。 。 。按键查询行线列线都接到单片机引脚,置第一行线为 0,依次查询列些;置第二行线为 0,依次查询列些;。 。
7、 。 。 。 。4 led 显示思路,段码为当前位显示值,位选线确定位,依次输出,每输出一次适当延时。5 AD,DADA0832 应用要点:关键在根据硬件连接确定其地址!选中地址,写出数据即可。数据和模拟量的对应关系根据硬件接和 0832 资料确定。要会编写各种输出波形,方波,三角,锯齿AD0809 应用要点:关键在根据硬件连接确定其各端口地址!选中地址,写出数据即可,写的同时启动 AD 转换,适当延时等待转换结束后读结果。会编写定时采集程序。6串口。单次的串口发送接收很简单,连续发送数据块则不同,数据块有发送地址段,接收地址段,通过发送地址修改发送数据,并判断是否发送完毕;接收时根据接收地址
8、存储数据,并判断是否接收完毕。所有需要判断的地方都可设置标志,用查询指令来判断转入相应的处理程序。使用 8031 的串行口按工作方式 3 进行串行口数据通讯,假定波特率为 1200b/s,第 9 数据位作奇偶校验位,以中断方式传送数据 ,请编写通讯程序。中断方式发送程序ORG 0000HLJMP MAINORG 0023HLJMP SSENDORG 0100HMAIN: MOV SP,#60HMOV TMOD,#20HMOV TH1,#0F3HMOV TL1,#0F3HMOV R2,#0FFHMOV 87H,#80HMOV SCON,#0C0HMOV DPTR,#2000HSETB TR1SE
9、TB ESSETB EASEND: MOVX A,DPTRMOV C,PMOV TB8,CMOV SBUF,AHERE: AJMP HERESSEND: DJNZ R2,SEND1AJMP RETURNSEND1: PUSH DPHPUSH DPLPUSH PSWPUSH ACCSETB 0D4HSETB 0D3HCLR TIINC DPTRMOVX A,DPTRMOV C,PMOV TB8,CMOV SBUF,APOP ACCPOP PSWPOP DPLPOP DPHCLR 0D4HCLR 0D3HRETURN: RETIEND接收程序:ORG 0000HLJMP MAINORG 0023HLJMP RRESORG 0100HMAIN: MOV SP,#60HMOV TMOD,#20HMOV TH1,#0F3H