|
发表于 2012-9-11 21:54:23
|
显示全部楼层
- /*
- 程序说明:
- 由P2_0输出PWM,12M时输出100Hz,
- LED接在P2_0上,每0.1秒钟改变一次亮度。
- 制作者;bbsniua
- 2012/9/1
- */
- #include<AT89X51.H> // AT89X51专属库
- #define uint8_t unsigned char
- #define LED P2_0 // PWM输出
- uint8_t P_S,PWM,d_ms;
- void mcu_init() // mcu初始化子函数
- {
- TMOD = 0x02; // T0为8位自动重装定时器
- TH0 = 256-100; // T0自动重装值,12M晶体时100uS中断一次
- TL0 = 256-100; // T0预装值
- ET0 = 1; // 开T0中断
- TR0 = 1; // 启动T0
- EA = 1; // 开总中断
- P_S = 1; // PWM计数
- PWM = 0; // PWM占空比
- P2 = 0xFF;
- }
- void int_t0(void) interrupt TF0_VECTOR // T0中断函数,12M晶体时100uS中断一次
- {
- ++P_S;
- if(P_S>100)
- {
- P2_0 = 1;
- P_S = 1;
- if(d_ms)
- {
- --d_ms;
- }
- }
- if(P_S>PWM)
- {
- P2_0 = 0;
- }
- }
- void delay_ms(uint8_t xms)
- {
- d_ms = xms;
- while(d_ms);
- }
- void main() // 主函数
- {
- mcu_init(); // mcu寄存器初始化
- while(1)
- {
- delay_ms(10); // 每100mS更改一次PWM占空比
- ++PWM;
- if(PWM>100)
- {
- PWM = 0;
- }
- }
- }
复制代码 |
|