2020-02-03 10:10发布
lllyanllll 发表于 2011-11-18 14:11 我这有模拟的, void timer0() interrupt 1 {
wctmdgcd 发表于 2012-2-24 22:24 #include sbit Pout =P1^3; //PWM波形输出 #define Max_Init_value 2000
最多设置5个标签!
电机驱动..............
mark一下下
不过我觉得用C写的会有一定的误差,因为每次进中断后的比较运算不好控制。
- /*
- 程序说明:
- 由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;
- }
- }
- }
复制代码一周热门 更多>