No.106421 作者:mapo365 邮件:mapo365@163.com ID:76093 登陆:2次 文章数:1篇 最后登陆IP:125.71.1.113 最后登陆:2007/5/25 23:48:45 注册:2007/5/6 12:51:09 财富:106 发帖时间:2007/5/25 23:48:45 发贴者IP:125.71.1.113 标题:mapo365:求助,关于中断,急 摘要:No.106421求助,关于中断,急 环境描述,我们先在程序中运行了一个由时钟不断触发的中断(用于产生方波——实际是PWM波),此中断为低优先级,然后我们又设置了一个高优先级的按键中断,在中断退出前,我们对中断返回地址进行了重定向,可是返回后,经过了时钟初始化程序,时钟中断不再产生了。然后我们把按键中断优先级改为低级(就是把SETB PX0那句去掉),一切正常,不知何故? ;******************************************************************* ; 全国大学生电子设计大赛 ; (c)Copyright 2007-2008 Liu Cunxian ; All Rights Reserved ;文件名:ndcs.asm ;作 者:刘存显 ;功 能:数控直流电流源 ;******************************************************************* ORG 0000H AJMP START ORG 0003H AJMP KEY ORG 000BH AJMP TIME0832 ORG 0013H AJMP A0809 ORG 0030H I EQU R6 ;电流标识(以实际的100倍标识) ;***********************主程序*************************** ;******************************************************** START: MOV SP,#5FH ;初始化堆栈 ;0832初始化 MOV DPTR,#0BFFFH ;0832地址 MOV A,#00H MOVX @DPTR,A ;0832输出0V MOV I,#20 ;电流初始化,显示电流为0.2A ACALL DISPLAY ;显示 ;开启中断 SETB EX1 SETB IT1 ;采用负跳变触发方式 SETB ET0 MOV TMOD,#01H ;定时/计数器0工作在方式一 SETB PX0 ;外部中断0设置为高优先级 SETB EA ;开启总中断 ;********************A0809取样计算************************ ;******************************************************** ;0809取样 A0809_5: MOV DPTR,#0DFF8H ;0809首地址 SETB F0 ;标志第一次取样 MOV R1,#100 ;取样100次 A0809AD: MOVX @DPTR,A ;启动AD转换 A0809_4: CJNE R1,#0,A0809_4 ;R1为0时启动计算程序 AJMP JISUAN ;等待中断 ;0809中断响应--求平均 A0809: ; PUSH DEC R1 CLR C ;清空标志位 MOVX A,@DPTR ;读数 JZ CHU_SHI_HUA ;A为0则初始化 JBC F0,A0809_1 ;第一次取样 ADD A,R0 ;求和 RRC A ;取平均 ; CLR C A0809_1: MOV R0,A ;存数 CJNE R1,#0,A0809_2 ;相等时不再启动AD RETI A0809_2: MOVX @DPTR,A ;启动AD转换 RETI ;计算--公式:Ton=I*92/R0-1 ;被除数:R2R3 ;商:R4R5 JISUAN: CLR C MOV R4,#0 ;商初始化 MOV R5,#0 MOV R1,#9 ;限定左移次数 MOV A,#92 MOV B,I MUL AB MOV R2,B ;存被除数 MOV R3,A SETB F0 ;标志第一次做除法 JISUAN2: JBC CY,JISUAN1 MOV A,R2 ;存被除数 MOV B,R0 ;除数 DIV AB JZ RL1 ;左移 MOV R2,B ;存被除数 JBC F0,JISUAN3 ;第一次做除法 INC R5 ;商加一 RL1: DEC R1 MOV A,R1 JZ JISUAN_END MOV A,R5 RLC A MOV R5,A MOV A,R4 RLC A MOV R4,A MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A AJMP JISUAN2 JISUAN1: INC R5 SUBB A,R0 CLR C MOV R2,A AJMP RL1 JISUAN3: MOV R5,A ;存商 AJMP RL1 JISUAN_END: MOV A,R5 SUBB A,#1 MOV R5,A MOV A,R4 SUBB A,#0 MOV R4,A CLR EX1 ;******************A0832PWM波初始化程序******************* ;******************************************************** A0832: CLR C MOV A,#0 ;计算定时器初值 SUBB A,R5 MOV R5,A CLR C MOV A,#255 SUBB A,R4 MOV R4,A CLR C MOV TL0,R5 ;计时器0定时时间设定 MOV TH0,R4 SETB F0 ;Ton/Toff选择标志 SETB TR0 ;定时开始 MOV DPTR,#0BFFFH MOV A,#255 MOVX @DPTR,A ;输出高电平 ;************************A0809取样************************ ;******************************************************** A0809TEST: MOV DPTR,#0DFF8H ;A0809首地址 MOVX @DPTR,A ;启动AD转换 A0809TEST1: JBC IE1,A0809TEST2 ;查询方式检测中断标志位 AJMP A0809TEST1 ;循环等待 A0809TEST2: MOVX A,@DPTR ;取电压 JZ CHU_SHI_HUA ;A为0则初始化 AJMP A0809TEST ;***********************部分子程序*********************** ;************************************** ......
>>返回讨论的主题
|