共2条
1/1 1 跳转至页
2407,timer1,nbsp,nbsp 关于2407的timer1 急盼高人指点
问
我用的是2402,在使用他的timer1时,不知为什么不能产生中断,也就今不了中断程序 。timer1初始化都是按合众达公司的例程设置的,应该没问题,还发现不能改写wdcr的值,其值总是为00c7h,导致不能关闭wd 调了好长时间了也找不到原因,真急人那。哪位好人给看看。下面是源程序:
.data ;page1 B1块,装载到数据区300h
;由cmd文件确定存储位置
b0 .word 0FFFEH ;通用i/o端口的d0位为零
GPR0 .word 0 ;通用目的寄存器
.include 240xA.h
.include 240xAvect.h
.def _c_int0
.text
_c_int0:
LDP #0H ;短立即数寻址设置dp=0
;数据存储器地址范围为0000h~007fh
CLRC CNF ;将B0映射到程序空间
SPLK #0000H,IMR ;屏蔽所有中断 IMR中断屏蔽寄存器
LACC IFR ;读中断标志 IFR->ACC
SACL IFR ;ACC->IFR 将ifr中的数据读出在写入ifr
;则可以清所有中断标志
LDP #00E0H ;80*E0数据存储器地址范围为07000h~0707fh
SPLK #0A05H,SCSR1 ;PLL倍频系数为,即2*20=40m,使能eva模块
SPLK #000BH,SCSR2 ;SARAM映射到程序空间,微控制器方式
;程序从片内开始,允许软件修改wd
;SARAM也映射到数据空间
SPLK #6FH,WDCR
MAR *,AR0
LDP #00E1H ;设置dp=e1h 则地址为7080h~70FFh
SPLK #0000H,MCRA ;定义iopan和iopbn作为通用io引脚
SPLK #0FF00H,MCRB ;定义iopCn作为通用io引脚
SPLK #0000H,MCRC ;定义iopen iopfn作为通用io
;2402无e f口,1个d口
SPLK #0FF00H,PADATDIR;所有引脚配置为输出,并置为高电平
SPLK #0FF00H,PBDATDIR;所有引脚配置为输出,并置为低电平
SPLK #0FFFFH,PCDATDIR;IOPC4引脚配置为输入,并置为高电平
MAIN:
;装入通用定时器1
LDP #00E8H ;设置dp=e0h,则地址为7400~747fh 为外设页面
SPLK #0040h,GPTCONA ;不起动模数转换,禁止所有通用定时器比较输出
;比较输出极性 T1PIN强制为低电平,下溢,周期,比较
;中断禁止
SPLK #0000H,T1CNT ;清t1计数器
SPLK #1042H,T1CON ;输入时钟预定标x/128 使用自己的定时器使能位,
;使能定时操作,内部时钟,
;D当计数值为零时,重装定时器比较寄存器,
;使能定时器比较,
SPLK #0FFFFH,T1PR ;设置周期寄存器t1pr
SPLK #00FFH,T1CMPR ;设置比较寄存器ticmpr的值
SPLK #0780H,EVAIMRA ;使能定时器1的上溢,丅溢,比较,周期中断。
SPLK #0FFFFH,EVAIFRA ;清中断。
LDP #0H
SPLK #0002H,IMR ;使能int2
CLRC INTM
WAIT:
NOP
B WAIT ;等待中断 程序总是在这等中断
GISR2: ;INT2通用中断程序
LDP #00E0H
LACL PIVR ;将外设中断矢量值装入累加器
XOR #002AH ;GPT1上溢中断矢量
BCND SISR2A,EQ ;
LACL PIVR ;将外设中断矢量值装入累加器
XOR #0029H ;GPT1上溢中断矢量
BCND SISR29,EQ ;
LACL PIVR ;将外设中断矢量值装入累加器
XOR #0028H ;GPT1上溢中断矢量
BCND SISR28,EQ ;
LACL PIVR ;将外设中断矢量值装入累加器
XOR #0027H ;GPT1上溢中断矢量
BCND SISR27,EQ ;
RET
SISR2A:
RET
SISR29:
RET
SISR28:
RET
SISR27:
RET
DELAY:
LAR AR0,#01H;延时子程序
D_LOOP:
RPT #01H
NOP
BANZ D_LOOP
RET
GISR1:RET
GISR3:RET
GISR4:RET
GISR5:RET
GISR6:RET
PHANTOM RET
.end 答 1: 晕啊,简单问题,自己找去解决了,很不难的!!!如题!!!!!!
.data ;page1 B1块,装载到数据区300h
;由cmd文件确定存储位置
b0 .word 0FFFEH ;通用i/o端口的d0位为零
GPR0 .word 0 ;通用目的寄存器
.include 240xA.h
.include 240xAvect.h
.def _c_int0
.text
_c_int0:
LDP #0H ;短立即数寻址设置dp=0
;数据存储器地址范围为0000h~007fh
CLRC CNF ;将B0映射到程序空间
SPLK #0000H,IMR ;屏蔽所有中断 IMR中断屏蔽寄存器
LACC IFR ;读中断标志 IFR->ACC
SACL IFR ;ACC->IFR 将ifr中的数据读出在写入ifr
;则可以清所有中断标志
LDP #00E0H ;80*E0数据存储器地址范围为07000h~0707fh
SPLK #0A05H,SCSR1 ;PLL倍频系数为,即2*20=40m,使能eva模块
SPLK #000BH,SCSR2 ;SARAM映射到程序空间,微控制器方式
;程序从片内开始,允许软件修改wd
;SARAM也映射到数据空间
SPLK #6FH,WDCR
MAR *,AR0
LDP #00E1H ;设置dp=e1h 则地址为7080h~70FFh
SPLK #0000H,MCRA ;定义iopan和iopbn作为通用io引脚
SPLK #0FF00H,MCRB ;定义iopCn作为通用io引脚
SPLK #0000H,MCRC ;定义iopen iopfn作为通用io
;2402无e f口,1个d口
SPLK #0FF00H,PADATDIR;所有引脚配置为输出,并置为高电平
SPLK #0FF00H,PBDATDIR;所有引脚配置为输出,并置为低电平
SPLK #0FFFFH,PCDATDIR;IOPC4引脚配置为输入,并置为高电平
MAIN:
;装入通用定时器1
LDP #00E8H ;设置dp=e0h,则地址为7400~747fh 为外设页面
SPLK #0040h,GPTCONA ;不起动模数转换,禁止所有通用定时器比较输出
;比较输出极性 T1PIN强制为低电平,下溢,周期,比较
;中断禁止
SPLK #0000H,T1CNT ;清t1计数器
SPLK #1042H,T1CON ;输入时钟预定标x/128 使用自己的定时器使能位,
;使能定时操作,内部时钟,
;D当计数值为零时,重装定时器比较寄存器,
;使能定时器比较,
SPLK #0FFFFH,T1PR ;设置周期寄存器t1pr
SPLK #00FFH,T1CMPR ;设置比较寄存器ticmpr的值
SPLK #0780H,EVAIMRA ;使能定时器1的上溢,丅溢,比较,周期中断。
SPLK #0FFFFH,EVAIFRA ;清中断。
LDP #0H
SPLK #0002H,IMR ;使能int2
CLRC INTM
WAIT:
NOP
B WAIT ;等待中断 程序总是在这等中断
GISR2: ;INT2通用中断程序
LDP #00E0H
LACL PIVR ;将外设中断矢量值装入累加器
XOR #002AH ;GPT1上溢中断矢量
BCND SISR2A,EQ ;
LACL PIVR ;将外设中断矢量值装入累加器
XOR #0029H ;GPT1上溢中断矢量
BCND SISR29,EQ ;
LACL PIVR ;将外设中断矢量值装入累加器
XOR #0028H ;GPT1上溢中断矢量
BCND SISR28,EQ ;
LACL PIVR ;将外设中断矢量值装入累加器
XOR #0027H ;GPT1上溢中断矢量
BCND SISR27,EQ ;
RET
SISR2A:
RET
SISR29:
RET
SISR28:
RET
SISR27:
RET
DELAY:
LAR AR0,#01H;延时子程序
D_LOOP:
RPT #01H
NOP
BANZ D_LOOP
RET
GISR1:RET
GISR3:RET
GISR4:RET
GISR5:RET
GISR6:RET
PHANTOM RET
.end 答 1: 晕啊,简单问题,自己找去解决了,很不难的!!!如题!!!!!!
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |