芯片解密MS83f系列单片机的多功能程序
- 芯片解密/* ----------------
- * VDD----------|1(VDD) (GND)8|------------GND
- * RED--------- |2(RA6) (PA0)7|------------GREEN
- * PWM3--------|3(PC3) (PA1)6|------------AD2
- * AD6-----------|4(PC2) (PC4)5|------------PWM4
- * ----------------
- */
- /*程序说明:ADC转换,通过ADC测量实现灯的转变,通过ADC测量,对输出mcu引脚频率以及占空比进行控制,从而达到控制输出电流电压*/
- /*timer0 用的是1:256分频,timer0增1周期为32us,中断一次耗时32us*255=8.16ms*/
- /*自设的pwm~pa6采用系统时钟的80分频,即一个pwm周期为0.125us*80=10us,由软件方法实现设定,PA6的震动频率是80的整倍数,占空比自调(必须由中断计时)*/
- /*为降低定时器中断产生的难度,暂时将pwm周期设置为20us,由__delay_us()函数来完成。*/
- /* 注意:本程序所有的占空比是小数表示,不是用百分数表示*/
- #include "syscfg.h"
- #include "MS83Fxx02.h"
- #include<stdio.h>
- #define _XTAL_FREQ 32000000 //内部晶振频率为16M
- //时钟周期与机器周期为1:1,2T模式下,2个机器周期为一个指令周期,当前系统指令周期为0.125us,
- //******************************
- #define red_on PA6=0;
- #define red_off PA6=1;
- #define green_on PA0=0;
- #define green_off PA0=1;
- //*****************************//
- #define shutled {red_off;green_off;} //所有的灯熄灭
- #define openled {red_on;green_on;} //所有灯打开
- #define TMR0_VALUE_INIT 5;//1个timer0中断是(255-5)*0.125us*256=8ms,1250个timer0中断是1s
- #define delay_num 500; //大量延时用的默认毫秒值
- unsigned int interrupt_time=0; //timer0中断次数
- float adc_avg_num=0, VCC=0.0; //ADC转换出来的数值
- /*-------------------模糊自适应pid-------------------*/
- #define IS_Kp 1
- #define IS_Ki 2
- #define IS_Kd 3
- #define NL -3
- #define NM -2
- #define NS -1
- #define ZE 0
- #define PS 1
- #define PM 2
- #define PL 3
- static const float fuzzyRuleKp[7][7]={
- PL, PL, PM, PM, PS, PS, ZE,
- PL, PL, PM, PM, PS, ZE, ZE,
- PM, PM, PM, PS, ZE, NS, NM,
- PM, PS, PS, ZE, NS, NM, NM,
- PS, PS, ZE, NS, NS, NM, NM,
- ZE, ZE, NS, NM, NM, NM, NL,
- ZE, NS, NS, NM, NM, NL, NL
- };