|
发表于 2012-7-22 19:39:03
|
显示全部楼层
本帖最后由 chengzepeng 于 2012-7-22 19:46 编辑
单片机型号为PIC10F200,信号从GP0输出,GP1接按钮(开关),GP2为工作指示灯,
输出频率为300Hz,占空比70%。- #include <pic.h>
- // 内部RC,关看门狗,关外部复位,开代码保护
- __CONFIG(OSC_IntRC & WDTE_OFF & MCLRE_OFF & CP_ON); //10F200
- #define uchar unsigned char
- #define uint unsigned int
- #define P_OUT GP0
- #define K_ON GP1
- #define LED GP2
- bit P_ON;
- void delay_us(uchar xus) // 进入退出一次10个指令周期,10uS
- {
- while(--xus)
- {
- NOP();
- NOP();
- NOP();
- NOP();
- NOP();
- NOP();
- NOP();
- }
- }
- void PWM_OUT()
- {
- while(K_ON)
- {
- P_OUT = 1;
- delay_us(233); // 高电平2333uS
- NOP();
- P_OUT = 0;
- delay_us(99); // 低电平999uS
- NOP();
- NOP();
- }
- delay_us(8333);
- }
- void main()
- {
- if(!GPWUF) // 检测到引脚唤醒后置位的GPWUF
- {
- P_ON = 0;
- }
- GPWUF=0;
- FOSC4 = 0;
- GPIO = 0;
- TRIS = 0b00001010; //
- OPTION=0b00000001; // 开IO唤醒,开IO上拉,T0为内部,从低到高触发,预分频给T0,分频比1:4(4uS)
- while(1)
- {
- if(!K_ON)
- {
- P_ON = !P_ON;
- LED = P_ON;
- while(!K_ON);
- delay_us(8333);
- }
- if(!P_ON)
- {
- P_OUT = 0;
- LED = 0;
- GPWUF = 0;
- SLEEP();
- }
- else
- {
- PWM_OUT();
- }
- }
- }
复制代码 |
|