C8051F850 GPIO Interrrupt
来源:互联网 发布:dps分析软件win7 编辑:程序博客网 时间:2024/05/17 20:14
C8051F850有两个外部中断向量,分别是INT0,INT1。只有P0口支持外部中断输入。比较奇怪的是,GPIO的边沿设置竟然是放在了TCON这个寄存器里面。。
如下代码实现了:将P0.4作为外部中断INT0的输入,并且设置成下降沿触发。并使用P1.0口作为LED的输出口。
void C8051F850_IO_Initial(void){ //Disable Watchdog with key sequence WDTCN = 0xDE; WDTCN = 0xAD; //Using internal 24.5MHz RC Oscillator, and no Division CLKSEL = CLKSEL_CLKSL__HFOSC | CLKSEL_CLKDIV__SYSCLK_DIV_1; //GPIO initial, All IO are input P0MDOUT = P0MDOUT_B0__OPEN_DRAIN | P0MDOUT_B1__OPEN_DRAIN | P0MDOUT_B2__OPEN_DRAIN | P0MDOUT_B3__OPEN_DRAIN | P0MDOUT_B4__OPEN_DRAIN | P0MDOUT_B5__OPEN_DRAIN | P0MDOUT_B6__OPEN_DRAIN | P0MDOUT_B7__OPEN_DRAIN; //All P0 IO are digital function P0MDIN = P0MDIN_B0__DIGITAL | P0MDIN_B1__DIGITAL | P0MDIN_B2__DIGITAL | P0MDIN_B3__DIGITAL | P0MDIN_B4__DIGITAL | P0MDIN_B5__DIGITAL | P0MDIN_B6__DIGITAL | P0MDIN_B7__DIGITAL; //P0.4 is GPIO, so Skipped P0SKIP = P0SKIP_B0__NOT_SKIPPED | P0SKIP_B1__NOT_SKIPPED | P0SKIP_B2__NOT_SKIPPED | P0SKIP_B3__NOT_SKIPPED | P0SKIP_B4__SKIPPED | P0SKIP_B5__NOT_SKIPPED | P0SKIP_B6__NOT_SKIPPED | P0SKIP_B7__NOT_SKIPPED; //P1.0 LED output P1MDOUT = P1MDOUT_B0__PUSH_PULL | P1MDOUT_B1__OPEN_DRAIN | P1MDOUT_B2__OPEN_DRAIN | P1MDOUT_B3__OPEN_DRAIN | P1MDOUT_B4__OPEN_DRAIN | P1MDOUT_B5__OPEN_DRAIN | P1MDOUT_B6__OPEN_DRAIN | P1MDOUT_B7__OPEN_DRAIN; //All P1 IO are ditigal P1MDIN = P1MDIN_B0__DIGITAL | P1MDIN_B1__DIGITAL | P1MDIN_B2__DIGITAL | P1MDIN_B3__DIGITAL | P1MDIN_B4__DIGITAL | P1MDIN_B5__DIGITAL | P1MDIN_B6__DIGITAL | P1MDIN_B7__DIGITAL; //P1.0 is GPIO, so skipped P1SKIP = P1SKIP_B0__SKIPPED | P1SKIP_B1__NOT_SKIPPED | P1SKIP_B2__SKIPPED | P1SKIP_B3__NOT_SKIPPED | P1SKIP_B4__NOT_SKIPPED | P1SKIP_B5__NOT_SKIPPED | P1SKIP_B6__NOT_SKIPPED | P1SKIP_B7__NOT_SKIPPED; XBR2 = XBR2_WEAKPUD__PULL_UPS_ENABLED | XBR2_XBARE__ENABLED; //Active Low, @P0.4 IT01CF = IT01CF_IN0PL__ACTIVE_LOW | IT01CF_IN0SL__P0_4; //External 0 interrupt is triggered by edge TCON |= TCON_IT0__EDGE; //Enable external interrupt 0 IE = IE_EA__DISABLED | IE_EX0__ENABLED | IE_EX1__DISABLED | IE_ESPI0__DISABLED | IE_ET0__DISABLED | IE_ET1__DISABLED | IE_ET2__DISABLED | IE_ES0__DISABLED;}
在主函数中的调用如下:
#pragma vector=IE0_int__interrupt void External_ISR(void){ LED1 != LED1;}void main(void){ C8051F850_IO_Initial(); IE_bit.EA = 1; while(1);}
0 0
- C8051F850 GPIO Interrrupt
- linux interrrupt
- C8051F850 ADC Polling Example
- posted-interrrupt implementation
- gpio
- gpio
- GPIO
- GPIO
- GPIO
- GPIO
- GPIO
- GPIO
- GPIO
- GPIO
- GPIO
- gpio
- GPIO
- gpio
- 5.10TCP客户端服务器
- 3.1Linux内核的配置和编译
- 3.2Linux的模块驱动
- nyoj 括号配对问题 2
- DLL入门浅析——使用DLL在进程间共享数据
- C8051F850 GPIO Interrrupt
- php zip 打包文件夹
- 快速透视AIX系统
- ios开发--异常处理
- Android:ProgressBar 颜色的设置
- leetcode_oj_Longest Substring Without Repeating Characters
- Android如何实现老版优酷客户端三级环形菜单
- 使用ArcGIS结合下载的谷歌卫星地图搭建自己的地图服务
- 《悟透JavaScript》之 甘露模型(新)