MC96F8208现代芯片C语言程序Word文件下载.docx

上传人:b****1 文档编号:830488 上传时间:2023-04-29 格式:DOCX 页数:51 大小:23.36KB
下载 相关 举报
MC96F8208现代芯片C语言程序Word文件下载.docx_第1页
第1页 / 共51页
MC96F8208现代芯片C语言程序Word文件下载.docx_第2页
第2页 / 共51页
MC96F8208现代芯片C语言程序Word文件下载.docx_第3页
第3页 / 共51页
MC96F8208现代芯片C语言程序Word文件下载.docx_第4页
第4页 / 共51页
MC96F8208现代芯片C语言程序Word文件下载.docx_第5页
第5页 / 共51页
MC96F8208现代芯片C语言程序Word文件下载.docx_第6页
第6页 / 共51页
MC96F8208现代芯片C语言程序Word文件下载.docx_第7页
第7页 / 共51页
MC96F8208现代芯片C语言程序Word文件下载.docx_第8页
第8页 / 共51页
MC96F8208现代芯片C语言程序Word文件下载.docx_第9页
第9页 / 共51页
MC96F8208现代芯片C语言程序Word文件下载.docx_第10页
第10页 / 共51页
MC96F8208现代芯片C语言程序Word文件下载.docx_第11页
第11页 / 共51页
MC96F8208现代芯片C语言程序Word文件下载.docx_第12页
第12页 / 共51页
MC96F8208现代芯片C语言程序Word文件下载.docx_第13页
第13页 / 共51页
MC96F8208现代芯片C语言程序Word文件下载.docx_第14页
第14页 / 共51页
MC96F8208现代芯片C语言程序Word文件下载.docx_第15页
第15页 / 共51页
MC96F8208现代芯片C语言程序Word文件下载.docx_第16页
第16页 / 共51页
MC96F8208现代芯片C语言程序Word文件下载.docx_第17页
第17页 / 共51页
MC96F8208现代芯片C语言程序Word文件下载.docx_第18页
第18页 / 共51页
MC96F8208现代芯片C语言程序Word文件下载.docx_第19页
第19页 / 共51页
MC96F8208现代芯片C语言程序Word文件下载.docx_第20页
第20页 / 共51页
亲,该文档总共51页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

MC96F8208现代芯片C语言程序Word文件下载.docx

《MC96F8208现代芯片C语言程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《MC96F8208现代芯片C语言程序Word文件下载.docx(51页珍藏版)》请在冰点文库上搜索。

MC96F8208现代芯片C语言程序Word文件下载.docx

6|P31/RXD/(SCL)AN8/BUZO/EINT11/P11|15<

--COM1

TXD/LEDd<

7|P30/TXD/(SDA)AN9/PWM1/EINT11/P12|14<

--COM2

LEDc<

8|P25/SCLAN10/PWM2/EINT12/P13|13-->

PWM2

LEDb<

9|P24/SDAAN11/MISO/P14|12<

--COM3

LEDa<

10|P16/AN13/SCKAN12/MOSI/P15|11<

--COM4

-------------------------------------------

*/

//------------------------------------------------------------------------------

//Includefileandvariable

#include<

MC96F8208S.h>

intrins.h>

Typedef.h>

#definefocus0

#include"

Variable.h"

Main.h"

//initialpart

voidDelay1ms(unsignedcharDelayCount)

{

unsignedchari,j;

for(i=0;

i<

DelayCount;

i++)

{

for(j=0;

j<

250;

j++)

{

nop;

}

}

}

voidMCUInitialSetting()

{

//SystemClockSelect&

builtinresetlevelselect

#ifCRYSTAL

P3FSR=0xC0;

//7=1:

P37_XOUT,6=1:

P36_XIN

SCCR=0x00;

//INTRCOSC(fIRC)forsystemclock

OSCCR=0x22;

//externalOSCenablestart,INT-RC/2(8MHz)

Delay1ms(100);

//16ms

SCCR=0x01;

//external4.194304MHzmainOSC(fxin)forSystemclock

OSCCR=0x06;

//internalRCOSCdisable,externalmainOSCenable

#else

OSCCR=0x20;

//internalRCOSC8MHz

#endif

LVRCR=0x00;

//builtinreset1.6Vset,LVRCR.0=0enable!

!

//b7b6b5b4b3b2b1b0

//AN3AN2DSCLDSDA

P0IO=0x03;

//----ininoutout

P0OD=0x03;

//----PPPPODOD//0Push-pulloutput,1Open-drainoutput

P0PU=0x03;

//----offoffonon

P0=0x03;

//----0011

P03DB=0x00;

//00P35DB---P03DBP02DB76=01:

fx/4=1usnoisefiltering//ConfigureDebounce---Disable

P0FSR=0x18;

//00011000

//I/Ocom4com3PWM2com2com1

P1IO=0xff;

//-outoutoutoutoutout-

P1OD=0x00;

//-PPPPPPPPPPPP-

P1PU=0x00;

//-offoffoffoffoffoff-

P1=0x36;

//-011011-

P12DB=0x00;

//----P13DBP12DBP11DB-//ConfigureDebounce---Disable

P1FSRH=0x00;

//00P160P150P140//I/OPort

P1FSRL=0x20;

//0PWM20P120P1100//I/OPort

//I/OI/O

P2IO=0x30;

//--outout----

P2OD=0x00;

//--PPPP----

P2PU=0x00;

//--oFFoFF----

P2=0x00;

//--00----

P2FSR=0x00;

//------00//P25isI/O,P24isI/O

//BUZI/OI/OI/OI/OI/O

P3IO=0xff;

//OUTOUTout--outOUTOUT

P3OD=0x00;

//PPPPPP--PPPPPP

P3PU=0x00;

//offoffoff--offoFFoFF

P3=0x00;

//000--000

//P3FSR=0xE1;

//111--001

EIPOL1=0x00;

//ExtInt8fallingedgetrigger

EIPOL0L=0x00;

//ExtInt3~0PolarityRegisterLow

EIPOL0H=0x00;

//ExtInt7~4PolarityRegisterHigh

EIFLAG0=0x00;

//ExtIntFlagRegister0

EIFLAG1=0x00;

//ExtIntFlagRegister1

IE=0x80;

//(EA)-ExG0--Ex12Ex11Ex10

IE1=0x00;

//---(TX)(RX)I2CEx6Ex5

IE2=0x0e;

//--ExG1-T2(T1)T0T0V

IE3=0x04;

//---BITWDT(WT)SPIADC

//AD寄存器初始化

ADCCRH=0x07;

//clock=fx/8,LSBsaveADCvalue,高8位AD使用低4位3:

0,低8位AD全部使用7:

ADCCRL=0x90;

//内部VDD作为参考

T1_1s=0;

T1_minute=0;

T1_hour=0;

Menu=0;

Vpoc=1;

EEPword=0;

//task:

TimerandInterruptstart

voidTimer_Start()

#ifCRYSTAL//externalOSC4.194304MHz

T0CR=0x85;

//PCS=4.194304MHz/8=524288Hz(1.9073486us),Timer0enable

T0DR=0x83;

//1.9073486usx131=249.862666us

WTCR=0x81;

//61.03515625uswatchtimer--mainosc4.194304MHz/256=16.384KHz(61.03515625us)

WTDR=0xD2;

//61.03515625usx82=5.00488msinterval

//WT中断计算公式:

Fwck=Fx/128=32768;

WT频率=Fwck/2^14=2Hz;

即每周期生产一个中断=500ms;

T1CRH=0x80;

//Timer1enable

T1ADR=259;

//15.258789usx260=3.9998msinterval

T1CRL=0x40;

//pcs=4.194304MHz/64=65.536KHz(15.258789us)

T1CRH=0x81;

//Timer1start

T2CRH=0xb0;

//Timer2enable,PWM2O是重复模式

T2ADR=259;

//15.258789usx260=3.9998msinterval频率周期为4ms

T2CRL=0x40;

T2CRH=0xb1;

//Timer2start

BITCR=0x4E;

//BIT=4.19MHz/128=32.768KHz(30.517578us)30.517578us*128=3.906ms

WDTDR=0xfa;

//3.906x250=976.5mswatchdogrefreshcycle

WDTCR=0xE0;

//WDTenableandrefresh

#else//internalRCOSC8MHz

//PCS=8MHz/8=1000000Hz(1us),Timer0enable

T0DR=0xF9;

//1usx250=250us

//32uswatchtimer--mainosc8MHz/256=31.25KHz(32us)

WTDR=0xfc;

//32*125=4ms溢出,清计数器

T1ADR=3999;

//1usx4000=4msinterval

T1CRL=0x60;

//pcs=8MHz/8=1us

//T2ADR=3999;

//1usx4000=4msinterval频率周期为4ms

T2ADR=19;

//1usx20=20usinterval频率周期为20us

T2CRL=0x60;

//Timer2start

//BIT=8MHz/128=62.5KHz(16us)16us*128=2.048ms

//2.048x250=512mswatchdogrefreshcycle

//+++++++++++++++++++++++++++++++++++++++++++

//ADC

//input:

AN

//output:

8bitADCvalue

ucharADdata(ucharAn)//带变量的函数

ucharTempData=0;

ADCCRL&

=0xf0;

//清通道选择位

nop;

ADCCRL|=An;

//选择通道

ADCCRL|=ADST;

//开启ADC转换

//等待转换完成

while(!

(ADCCRL&

0x10));

//为真,转换AD完成--此处一定要用按位&

运算符,用逻辑&

&

会出现AD通道错乱现象

TempData=ADCDRL>

>

4;

TempData|=ADCDRH<

<

=~ADST;

//STOPADC

returnTempData;

//TempData的值返回给了ADdata()函数

voidAD_AN2(void)

uchari;

for(i=0;

8;

{

rADC[0]+=ADdata(AN2);

//TempData的值返回给了ADdata()带变量的函数

}

AD2=rADC[0]/8;

//取8次平均值

rADC[0]=0;

CapacityV=0;

CapacityV=AD2/5;

//每5个AD为0.1V

voidAD_AN3(void)

rADC[1]+=ADdata(AN3);

AD3=rADC[1]/8;

rADC[1]=0;

AdAn3=0;

201;

if(AD3<

RtTable[AdAn3])AdAn3++;

//注意正温转感器与负温转感器的问题来设置数组是小于还是大于判断

elsei=202;

//不成立,提前退出,不进行空等待

if(AdAn3>

=200)AdAn3=200;

//++++++ADCProcess+++++++++++++++++++++++++++++++++++++

voidProcess_AD(void)

AD_AN3();

}

/*-------------------------------------------------------------------------*/

voidBeeperOn(void)

buzon=1;

m_State|=BZSTATE_SOUND;

//m_state控制BUZON&

BUZOFF

m_Tmr=m_OnTime;

voidBeeperOff(void)

buzon=0;

m_State&

=(~BZSTATE_SOUND);

m_Tmr=m_OffTime;

voidBeeperSet(ucharp_OnTime,ucharp_OffTime,ucharp_Repeat)

m_OnTime=p_OnTime;

m_OffTime=p_OffTime;

m_Repeat=p_Repeat;

if(p_Repeat)

{

BeeperOn();

}

else

BeeperOff();

voidBeeperControl(void)

if((Tick10ms&

TICK10MS_BEEP)==0)//1111,1111&

0000,0010=0000,0010=1

return;

Tick10ms=Tick10ms&

(~TICK10MS_BEEP);

//0000,0010&

~0000,0010=0000,0010&

1111,1101=0000,0000

if(m_Repeat==0)//蜂鸣次数,多少次

/*dutycheck*/

if(m_Tmr)//蜂鸣的开或关的时间长短

m_Tmr--;

/*toggle*/

if(m_State&

BZSTATE_SOUND)//m_state控制BUZON&

m_Repeat--;

//-----------------------------------------------------------------

//ReadKey

voidReadKey()

{//数码管注意是共阴

com4=1;

com1=1;

com2=1;

com3=1;

//关所有显示

nop;

LEDa=0;

LEDb=0;

LEDc=0;

LEDd=0;

LEDe=0;

LEDf=0;

LEDg=0;

LEDh=0;

//关所有显示

P2PU=0x30;

//Rup

P2IO=0x00;

//input

P3PU|=0x7f;

P3IO&

=0x80;

//P37OUTPUT,Otherinput

P2=0xff;

P3|=0x7f;

if(xiao_dou_time<

=2000)xiao_dou_time++;

if(KEY1==0)

{

if(xiao_dou_time==12)

{

Menu++;

Vpoc=0;

//只要有任一按键按下AN2为普通I/O对电容充电

P0FSR=0x10;

//AN2isI/O,AN3isAD

P0IO=0x07;

//AN2isoutput

P0=0x04;

//AN2为高电平对电容进行充电

DelayBUZ=1;

count_1s=0;

//每1秒钟数字加11us19us

T2BDR=1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2