第六章微机控制系统举例PPT资料.ppt
- 文档编号:4653037
- 上传时间:2023-05-03
- 格式:PPT
- 页数:59
- 大小:1.79MB
第六章微机控制系统举例PPT资料.ppt
《第六章微机控制系统举例PPT资料.ppt》由会员分享,可在线阅读,更多相关《第六章微机控制系统举例PPT资料.ppt(59页珍藏版)》请在冰点文库上搜索。
状态编码,用于控制电机转动TimerDATA42H;
软件计数器变量,用于控制电机转速Key_inBIT00H;
键盘状态变量,用于判断是否有键按下,变量定义,主程序,ORG0000HAJMPMAINORG000BHLJMPTimer_0_INTORG0030H;
MAIN:
MOVSP,#60HMOVP1,#03H;
电机初始化MOVM_state,#00H;
MOVM_Code,#33HLCALLInit_8279;
MOVTMOD,#01H;
将T0设置为方式1定时器MOVTH0,#0EEH;
设置T0定时器初值高8位,T0每隔5ms中断一次MOVTL0,#00H;
设置T0定时器初值低8位,T0每隔5ms中断一次SETBEA;
打开单片机系统中断SETBET0;
打开T0中断CLRTR0;
关闭T0计数器,主程序(初始化显示缓冲器),MOVR0,#78H;
MOVR7,#08H;
CLRA;
LOOP:
MOVR0,A;
INCR0;
DJNZR7,LOOPCLRKey_in,主程序(巡视键盘状态),LCALLDISPLOOP1:
LCALLKey_scanJBCKey_in,NEXTSJMPLOOP1NEXT:
CJNEA,#0FH,NEXT1MOVM_state,AMOV7FH,AMOVTimer,#200;
设置步进电机转速,每1秒转动1个步角。
SETBTR0;
启动T0.LCALLDISPSJMPLOOP1;
NEXT1:
CJNEA,#0BH,NEXT2MOVM_state,AMOV7FH,AMOVTimer,#200;
启动T0.LCALLDISPSJMPLOOP1,主程序(巡视键盘状态),NEXT2:
CJNEA,#0,LOOP1;
MOVM_state,AMOV7FH,ACLRTR0;
关闭T0,步进电机停止转动。
LCALLDISPSJMPLOOP1,8279初始化子程序,Init_8279:
;
8279初始化C8279EQU0E001H;
定义8279控制口地址D8279EQU0E000H;
定义8279数据口地址MOVDPTR,#C8279;
设置8279控制口指针MOVA,#0H;
8X8左边输入显示,编码键盘扫描,双键封锁.MOVXDPTR,A;
写8279方式字MOVA,#2AH;
分频系数为10.MOVXDPTR,A;
写分频系数MOVA,#0D0H;
将显示RAM清0控制字.MOVXDPTR,A;
清显示DISP1:
MOVXA,DPTR;
读入FIFO状态字JBACC.7,DISP1;
判断8279工作是否正常RET,显示子程序,DISP:
显示子程序,缓冲区为78H-7FHMOVA,#90H;
写显示数据命令MOVDPTR,#C8279;
设置8279控制口指针MOVXDPTR,A;
设置从左边开始写入数据MOVR0,#78H;
设置指针,准备送入显示数据.MOVR6,#08HDISP2:
MOVA,R0;
从显示缓存器取数据.MOVDPTR,#TABMOVCA,A+DPTR;
转换成显示码.MOVDPTR,#D8279;
设置8279数据口指针.MOVXDPTR,A;
将显示码送到8279显示RAM.INCR0;
调整显示缓存器指针.DJNZR6,DISP2RETTAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;
0,1,2,3,4,5,6,7DB7FH,6FH,77H,7CH,39H,5EH,79H,71H;
8,9,A,B,C,D,E,FDB73H,3EH,40H,6EH,76H,38H,00H,80H;
P(10),U(11),-(12),Y(13),H(14),L(15),关(16),.(17),键盘扫描子程序,Key_scan:
键盘扫描子程序MOVDPTR,#C8279MOVXA,DPTRANLA,#07HCJNEA,#0H,GET1SJMPKEY4GET1:
MOVA,#40H;
有键输入,则设置读FIFO/RAM数据命令.MOVXDPTR,A;
发出读FIFO/RAM数据命令.MOVDPTR,#D8279MOVXA,DPTRMOVB,AMOVR2,#00HMOVDPTR,#KEYDATA,键盘扫描子程序续,KEY1:
MOVA,#00HMOVCA,A+DPTRCJNEA,B,KEY2SJMPKEY3KEY2:
INCDPTRINCR2SJMPKEY1KEY3:
MOVA,R2SETBKey_inKEY4:
RETKEYDATA:
DB00H,08H,10H,18H,01H,09H,11H,19H;
键值表DB02H,0AH,12H,1AH,03H,0BH,13H,1BH,T0中断服务子程序(驱动步进电机),Timer_0_INT:
PUSHPSW;
PUSHACC;
MOVPSW,#08H;
MOVTH0,#0EEH;
ORLTL0,#00HDJNZTimer,T_RETURNMOVA,M_state;
CJNEA,#0FH,T_NEXTMOVA,M_Code;
RLA;
MOVM_Code,A;
MOVP1,A;
MOVTimer,#200;
SJMPT_RETURN;
T0中断服务子程序(驱动步进电机)续,T_NEXT:
CJNEA,#0BH,T_RETURNMOVA,M_Code;
RRA;
T_RETURN:
POPACC;
POPPSW;
RETIEND,单片机控制直流电机系统,一、系统要求,1)显示要求:
系统初始化时,左边4个显示器显示4个0,左起第5个显示器关闭,左起第6、7个显示器显示8、0,最右边一个显示器显示C。
系统在测试时,左边4个数码管显示电机转速;
左起第6、7个显示器显示D/A转换器的数字量;
最右边的数码管显示电机的状态,当电机正转、反转和停止时,最右边的数码管显示分别F、B和C。
2)键盘要求:
键入F、B或C命令,分别使电机正转、反转和停止。
键入E命令,使D/A转换器的输入数字量加1。
键入A命令,使D/A转换器的输入数字量减1。
键入D命令,采用负反馈方式使电机以2000转/分的速度正转。
二、系统硬件电路方框图,三、系统硬件图D/A转换器及其放大电路,P0口,89C58,(键盘显示器电路),直流电机工作原理及其驱动电路,图中AOUT是来自运算放大器的模拟电压信号。
当AOUT0.7v,则晶体管T2导通、T1截止,使加入直流电机的电压VCTRL为正,电机正转。
当AOUT-0.7v,则晶体管T1导通、T2截止,使加入直流电机的电压VCTRL为负,电机反转。
电压VCTRL的绝对值越大,则电机转速越快。
电压VCTRL的绝对值越小,则电机转速越慢。
当电压VCTRL=0,则电机停止转动。
电机转速测试装置,电机转速测试电路,转速计算公式,Ttest是测试时间,单位是秒;
N是测试时间内计入的脉冲信号数,以上公式的转速单位是转/分。
若Ttest=1秒;
则转速n=5*N,转速单位是转/分。
四、系统软件框图(主程序框图),初始化程序框图,显示键盘扫描子程序框图,键命令处理子程序框图,T0中断服务子程序INT0中断服务子程序,五、系统源程序设计,M_stateDATA40H;
电机工作状态变量DAC_0832DDATA41H;
D/A转换器输入变量Timer_1sDATA42H;
定时软件计数器变量CounterHDATA43H;
电机转盘输出脉冲数变量高8位CounterLDATA44H;
电机转盘输出脉冲数变量低8位DAC0832_addrEQU8000H;
定义D/A转换器接口地址Key_inBIT00H;
键盘状态变量,变量说明,主程序,ORG0000HAJMPMAINORG0003HLJMPINT_0ORG000BHLJMPTimer0_INTORG0030HMAIN:
LCALLInit_sp_bit_dataLCALLInit_8279_T0_INTLCALLInit_D_MLOOP:
LCALLDISPLCALLKey_scanJBCKey_in,Do_keyProSJMPLOOPDo_keyPro:
LCALLKey_processSJMPLOOP,初始化程序(堆栈、变量),Init_sp_bit_data:
MOVSP,#70HMOVPSW,#0CLRKey_in;
MOVM_state,#0CH;
电机初始状态是停止MOVDAC_0832D,#80H;
D/A转换器输入变量初始值为80H,使输出的模拟量为0V。
MOVTimer_1s,#20;
定时软件计数器变量初值为20,使测量时间为1秒MOVCounterH,#0;
电机转盘生产脉冲计数器高8位清零MOVCounterL,#0;
电机转盘生产脉冲计数器低8位清零RET,8279、T0、中断初始化,Init_8279_T0_INT:
C8279EQU0E001H;
判断8279工作是否正常,8279、T0、中断初始化续,MOVTMOD,#01HMOVTH0,#4CH;
设置定时器初值,使T0定时50ms。
MOVTL0,#00H;
MOVIP,#01HCLRTR0;
SETBEA;
SETBIT0;
CLRET0;
CLREX0;
RET;
显示缓冲器、电机初始化,Init_D_M:
MOVR0,#60H;
60H67H为单片机显示RAMMOVR7,#04H;
ILOOP:
DJNZR7,ILOOPMOVR0,#16H;
MOVR0,#08HINCR0;
MOVR0,#00H;
MOVR0,#0CH;
MOVDPTR,#DAC0832_addrMOVA,DAC_0832DMOVXDPTR,ARET,显示子程序,DISP:
显示子程序,缓冲区为60H-67HMOVR0,#60H;
设置指针,准备送入显示数据.MOVR6,#08HMOVA,#90H;
写显示数据命令MOVDPTR,#C8279;
MOVXDPTR,A;
设置从左边开始写入数据DISP2:
调整显示缓存器指针.DJNZR6,DISP2RET;
共阴极显示码TAB:
键值表DB02H,0AH,12H,1AH,03H,0BH,13H,1BH,键输入处理子程序,Key_process:
CJNEA,#0FH,NEXT1MOVM_state,AMOVA,#0FFHMOVDAC_0832D,AMOVDPTR,#DAC0832_addrMOVXDPTR,A;
SETBET0;
SETBEX0;
MOV65H,#0FH;
MOV66H,#0FH;
MOV67H,#0FH;
LJMPRETK,键输入处理子程序续,NEXT1:
CJNEA,#0BH,NEXT2MOVM_state,ACLRAMOVDAC_0832D,AMOVDPTR,#DAC0832_addrMOVXDPTR,A;
MOV65H,#0;
MOV66H,#0;
MOV67H,#0BH;
AJMPRETK,键输入处理子程序续,NEXT2:
CJNEA,#0CH,NEXT3;
MOVM_state,AMOVA,#80HMOVDAC_0832D,AMOVDPTR,#DAC0832_addrMOVXDPTR,A;
MOV65H,#8;
MOV67H,#0CH;
SJMPRETKNEXT3:
CJNEA,#0EH,NEXT4MOVA,DAC_0832DCJNEA,#0FFH,Do_inc;
如果原变量值小于FFH,则变量加1.SJMPRETK,键输入处理子程序续,Do_inc:
INCDAC_0832D;
变量加1MOVA,DAC_0832D;
变量值送ACCMOVDPTR,#DAC0832_addrMOVXDPTR,A;
变量值送D/A转换器MOVB,AANLA,#0FHMOV66H,A;
将变量值低4位送66H显示缓冲器MOVA,BANLA,#0F0H;
SWAPAMOV65H,A;
将变量值高4位送66H显示缓冲器SJMPRETK,键输入处理子程序续,NEXT4:
CJNEA,#0AH,NEXT5MOVA,DAC_0832DCJNEA,#00H,Do_dec如果原变量值小于FFH,则变量加1.SJMPRETKDo_dec:
DECDAC_0832D;
变量减1MOVA,DAC_0832D;
将变量值高4位送66H显示缓冲器SJMPRETK,键输入处理子程序续,NEXT5:
CJNEA,#0DH,RETK;
判断是否反馈控制MOVM_state,A;
如果是反馈控制,则将电机工作状态变量值0DHMOV67H,A;
电机工作状态变量值0DH送显示缓冲器MOVA,#0E0H;
将E0H送ACCMOVDAC_0832D,A;
将E0H送D/A转换器输入变量MOVDPTR,#DAC0832_addrMOVXDPTR,A;
将E0H送D/A转换器,使产生接近2000转/分转速SETBTR0;
MOVB,AANLA,#0FHMOV66H,AMOVA,BANLA,#0F0H;
SWAPAMOV65H,ARETK:
T0中断服务子程序,Timer0_INT:
PUSHB;
PUSHDPH;
PUSHDPL;
改变寄存器工作区MOVTH0,#4CH;
T0重新赋初值ORLTL0,#00H;
T0重新赋初值DJNZTimer_1s,RETT;
定时软件计数器重新赋初值MOVR3,CounterH;
将脉冲计数值高8位送R3MOVR2,CounterL;
将脉冲计数值低8位送R3MOVCounterH,#0;
将脉冲计数值高8清0MOVCounterL,#0;
将脉冲计数值低8清0,转速计算程序段,;
计数信号数乘5,完成转速的计算MOVA,R3;
MOVR5,A;
MOVA,R2;
MOVR4,A;
CLRC;
MOVA,R2RLCA;
MOVR2,AMOVA,R3RLCAMOVR3,AMOVA,R2;
RLCAMOVR2,AMOVA,R3,RLCAMOVR3,AMOVA,R2ADDA,R4MOVR2,AMOVA,R3ADDCA,R5MOVR3,A,判断电机转速是否大于或小于2000转/分,;
判断是否进行负反馈控制,是则输出调整量MOVA,M_state;
CJNEA,#0DH,SKIPMOVA,#07H;
07D0H=2000CLRCSUBBA,R3JCTO_BIGGERJNZTO_SMALLERMOVA,#0D0HSUBBA,R2JCTO_BIGGERJNZTO_SMALLERSJMPSKIP,输出反馈控制量,TO_BIGGER:
使D/A转换器输入变量减1SJMPOUTPUTTO_SMALLER:
使D/A转换器输入变量加1OUTPUT:
MOVA,DAC_0832D;
D/A转换器输入变量送ACCMOVDPTR,#DAC0832_addrMOVXDPTR,A;
D/A转换器输入变量送D/A转换器MOVB,AANLA,#0FHMOV66H,AMOVA,BANLA,#0F0H;
SWAPAMOV65H,A,T0中断服务子程序续,SKIP:
LCALLCALCULATE;
将16进制的转速值转换成BCD码,供显示RETT:
POPDPL;
POPDPH;
POPB;
RETI;
将电机转速值转换成BCD码,CALCULATE:
将16进制的转速值转换成BCD码,供显示CLRA;
MOVR4,AMOVR5,A;
MOVR7,#16BLP0:
MOVA,R2RLCAMOVR2,AMOVA,R3;
RLCA;
MOVR3,AMOVA,R4;
ADDCA,R4;
DAA;
MOVR4,AMOVA,R5;
ADDCA,R5;
MOVR5,ADJNZR7,BLP0,将转速BCD码送显示缓冲器,;
将转速的BCD码数据送入单片机显示RAMMOVA,R5;
ANLA,#0F0H;
SWAPA;
MOV60H,AMOVA,R5ANLA,#0FH;
MOV61H,AMOVA,R4;
MOV62H,AMOVA,R5ANLA,#0FH;
MOV63H,ARET;
外部中断0服务子程序(转盘脉冲计数程序),INT_0:
外部中断0中断服务子程序,对直流电机旋转发出的脉冲进行计数PUSHACC;
PUSHPSWMOVA,CounterLADDA,#1MOVCounterL,AJNCRETINT_0INCCounterHRETINT_0:
POPPSWPOPACCRETIEND,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六 微机 控制系统 举例
![提示](https://static.bingdoc.com/images/bang_tan.gif)