调试步骤
- 看数据手册,了解常用的寄存器
- 查看参考代码,分析每一个语句的含义。如配置了什么寄存器,寄存器的作用是什么,配置了哪一位。
- 有哪些需要主要的地方。
中断触发选择方式
ISR.ASM 文件
中断入口地址
-
手册的《11.3 章节 D4 系统中断列表》。
-
手册《附录 O 关于中断号大于 31 在 Keil 中编译出错的处理》。
-
手册《8.2 特殊功能寄存器列表》
程序
#include "STC8A_IO_INT.h"
//IO中断配置参考程序
void io_interrupt_config()
{
//需要修改的地方
P1M0 = 0x00;
P1M1 = 0x00;
P_SW2 |= 0x80;
P1IM0 = 0x00; //上升沿中断
P1IM1 = 0xFF;
P1INTE = 0xff; //使能 P1 口中断
P_SW2 &= ~0x80;
EA = 1;
}
//由于中断向量大于 31,在 KEIL 中无法直接编译
//必须借用第 13 号中断入口地址
void common_isr() interrupt 13
{
unsigned char psw2_st;
unsigned char intf;
psw2_st = P_SW2;
P_SW2 |= 0x80;
//需要修改的地方
intf = P1INTF;
if (intf)
{
//需要修改的地方
P1INTF = 0x00;
if (intf & 0x01)
{
//P1.0 口中断
}
if (intf & 0x02)
{
//P1.1 口中断
}
if (intf & 0x04)
{
//P1.2 口中断
}
if (intf & 0x08)
{
//P1.3 口中断
}
if (intf & 0x10)
{
//P1.4 口中断
}
if (intf & 0x20)
{
//P1.5 口中断
}
if (intf & 0x40)
{
P2=0XFF;
//P1.6 口中断
}
if (intf & 0x80)
{
//P1.7 口中断
P2=0X00;
}
}
P_SW2 = psw2_st;
}
// ISR.ASM
//将下面的代码保存为 ISP.ASM,然后将文件加入到项目中即可
CSEG AT 0133H;P1口中断入口地址
JMP P1INT_ISR ;修改名字
P1INT_ISR: ;修改名字
JMP 006BH ;借用 13 号中断的入口地址
END
//012BH P0口中断入口地址
//0133H P1口中断入口地址
//013BH P2口中断入口地址
//0143H P3口中断入口地址
//014BH P4口中断入口地址
//0153H P5口中断入口地址
//015BH P6口中断入口地址
//0163H P7口中断入口地址
注意事项
- 调试一个新东西的时候,应该注意保存一份源程序。在此程序中再实现功能的添加。
参考文章
- EAXFR:扩展 RAM 区特殊功能寄存器(XFR)访问控制寄存器 STC 8051 单片机扩展 SRAM 介绍、使用以及配置_YaHa201286 的博客-CSDN 博客_单片机 sram
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于