导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[mapo365]求助,关于中断,急



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

;***********************部分子程序***********************
;************************************** ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:1578毫秒 最大:7276毫秒 查询6次