完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近正在使用12864液晶屏 打算用定时器和中断,但是主程序一运行到rim语句就会卡住,不知道这是怎么回事?tiM1和EXTI0的初始化设置都是按照以前单独可以用的例子来的
下面贴出程序 不知道有没有大大能解答一下 #include"stm8l152r8.h" #define uchar unsigned char #define uint unsigned int _Bool RW @PE_ODR:3; _Bool RS @PE_ODR:4; _Bool E @PE_ODR:5; _Bool DB0 @PB_ODR:1; _Bool DB1 @PB_ODR:2; _Bool DB2 @PB_ODR:3; _Bool DB3 @PB_ODR:4; _Bool DB4 @PB_ODR:5; _Bool DB5 @PB_ODR:6; _Bool DB6 @PG_ODR:4; _Bool DB7 @PG_ODR:5; _Bool DB6I @PG_IDR:4; _Bool DB7I @PG_IDR:5; //_Bool UP @PD_IDR:5; //_Bool DOWN @PD_IDR:6; //_Bool LEFT @PD_IDR:7; //_Bool RIGHT @PE_IDR:7; _Bool EXTI0 @PB_IDR:0; uchar num[]="0123456789"; uchar table[]="开始游戏"; uchar row,line,RAMDON,h; /**********************初始化程序************************/ void CLK_init(void) { CLK_CKDIVR=0X00;//16M时钟不分频 } void delay(uint i) { uint x,y; for(x=0;x>4; byte=x 0x0f; if(y<32) row=y; else {row=y-32;line=line+8;} write(0x80+row,1); write(0x80+line,1);//确定大列和行位置 readbyte();//空读 datH=readbyte(); datL=readbyte(); write(0x80+row,1); write(0x80+line,1);//读取地址会加一 if(color==1)//点亮点 { if(byte<8) {datH |= (1<<(7-byte));} else { datL |= (1<<(15-byte));} } if(color==0) { if(byte<8) datH = ~(1<<(7-byte)); if(byte>=8) datL = ~(1<<(15-byte)); } write(datH,0); write(datL,0); write(0x30,1); } void LCD_init(void) { busytest(); write(0x30,1); //8 位介面,基本指令集 busytest(); write(0x0c,1); //显示打开,光标关,反白关 busytest(); write(0x01,1); //清屏,将DDRAM的地址计数器归零 delay(10); } /**********************按键*******************/ /***********************main*******************************/ main() { uchar i; GPIO_init(); CLK_init(); EXTI_init();//外部中断准备 TIM1_init();//定时器准备 LCD_init();//初始化 清屏 lcd_clear();//清除图形缓存 point(1,1,1); point(2,1,1); _asm("rim"); while (1) { point(1,1,1); point(2,1,1); point(2,2,1); } } @far @interrupt void EXIT0(void) { EXTI_SR1|=0x01;//清除中断标志位 } @far @interrupt void TIM1_irq(void) { TIM1_SR1=0x00; RAMDON++; if(RAMDON>4095) RAMDON=0; } [/td] 以下内容为评论 [td] 本帖最后由 echain 于 2016-2-25 22:53 编辑 只要去掉_asm("rim")语句程序就可以运行下去 。 不知道是不是我的中断标志位的问题,可是清除标志位和初始化中断在只操作一个LED灯时都是可以的。 好奇怪 单独贴出初始化和响应函数 void TIM1_init(void) { CLK_PCKENR2 |= 0x02;//使能TIM1外围时钟 TIM1_CR1=0X00;//向上计数,无预装载 TIM1_IER=0X01;//更新中断使能 TIM1_PSCRH=0X80; TIM1_PSCRL=0X00;//32768分频 TIM1_ARRH=0X00; TIM1_ARRL=0Xcc;//重装载值 TIM1_CR1|=0X01;//TIM1使能 } void EXTI_init(void) { EXTI_CR1=0x02;//EXTI0中断使能 } @far @interrupt void EXIT0(void) { EXTI_SR1|=0x01;//清除中断标志位 } @far @interrupt void TIM1_irq(void) { TIM1_SR1=0x00; RAMDON++; if(RAMDON>4095) RAMDON=0; } |
|
相关推荐
1个回答
|
|
在正常情况下,执行该指令后程序应该继续正常执行。
程序卡住的原因可能是其他地方出现了问题。可能的原因包括但不限于以下几点: 1. 电源问题:请确保电源稳定,电源电压符合要求,并且电源和地的连接良好。 2. 硬件问题:检查连接的硬件设备是否正确安装,是否有错误的连接或者损坏的电路。 3. 中断优先级问题:请确保中断的优先级设置正确,不会导致优先级倒置从而引起系统死锁。 4. 软件代码问题:请检查代码中是否有死循环、延时等操作导致程序卡住。 5. 时钟配置问题:确保时钟源和时钟系统配置正确,以保证定时器和中断正常工作。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1627 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1550 浏览 1 评论
984 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1601 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
652浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
520浏览 3评论
539浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
508浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 04:01 , Processed in 0.707393 second(s), Total 83, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号