当前位置:首页 > 单片机 > 单片机
[导读]/********************************************************** 第一次使用 IAR 来搞 51 的程序, 用起来蛋疼, 搞了一晚上, * 居然和 Keil 差别挺大. 看来要慢慢熟悉, 多看文档和手册.* 多使用这些工具, 对比才能知道

/*

********************************************************

* 第一次使用 IAR 来搞 51 的程序, 用起来蛋疼, 搞了一晚上,

* 居然和 Keil 差别挺大. 看来要慢慢熟悉, 多看文档和手册.

* 多使用这些工具, 对比才能知道不同, 学习起来有意思啊!

* 2012.5.28 proteus 仿真, LED 模拟加减法运算. IAR 环境的

* 一些寄存器定义和声明看头文件就知道. 多数都是以联合体中

* 包含位字段形式和 8 位数据格式的寄存器名给出. 使用时要

* 看头文件.

*********************************************************

*/

#include /* 包含相关头文件 */

#include

/* 自定义变量别名 */

typedef unsigned int INT16U;

typedef signed int INT16S;

typedef unsigned char INT8U;

volatile INT16S ticks = 0xFF; /* 加法运算 LED 显示 */

volatile INT8U second = 0; /* 1s 计时 */

/*

** 主函数

*/

int main( void )

{

/* setup timer 0 */

TCON_bit.TF0 = 0;

TCON_bit.TR0 = 1; /* 启动定时器 0 */

P0 = 0xFF; /* 开始时 LED 全灭 */

/* 16 bit timer mode */

TMOD_bit.M00 = 1;

TMOD_bit.M10 = 0;

/*

* Set the timer with 16 bits. To get a repeat interval of

* 50000 cycles we loads TH0:TL0 with 0xFFFF - 1 - 50000 = 0x3CAE.

*/

TL0 = 0x3C;

TH0 = 0xAE;

IE_bit.ET0 = 1; /* Enable timer 0 interrupts */

__enable_interrupt(); /* Enable interrupts */

for (;;)

{

asm("NOP"); /* 嵌入汇编语句 NOP 指令 */

}

}

/*

* 定时器 0 中断

* Timer interrupt service routine

*/

#pragma vector = TF0_int

__interrupt void my_Timer1_ISR(void)

{

TCON_bit.TF0 = 0; /* 清零溢出标志位, 为下次准备 */

if (second++ > 10) {

second = 0;

--ticks;

P0 = ticks;

}

if (ticks < 0) { /* 减到 0 即全亮时, 从新开始 */

ticks = 0xFF;

}

}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭