HT66F50 C程序框架及注意事项.docx

上传人:b****3 文档编号:5222462 上传时间:2022-12-14 格式:DOCX 页数:8 大小:16.49KB
下载 相关 举报
HT66F50 C程序框架及注意事项.docx_第1页
第1页 / 共8页
HT66F50 C程序框架及注意事项.docx_第2页
第2页 / 共8页
HT66F50 C程序框架及注意事项.docx_第3页
第3页 / 共8页
HT66F50 C程序框架及注意事项.docx_第4页
第4页 / 共8页
HT66F50 C程序框架及注意事项.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

HT66F50 C程序框架及注意事项.docx

《HT66F50 C程序框架及注意事项.docx》由会员分享,可在线阅读,更多相关《HT66F50 C程序框架及注意事项.docx(8页珍藏版)》请在冰豆网上搜索。

HT66F50 C程序框架及注意事项.docx

HT66F50C程序框架及注意事项

HT66F50C程序框架及注意事项

HT66F50C程序框架及注意事项2011-03-2716:

27/********************************************************************

程序功能:

使PF1引脚的电平每1s翻转1次

芯片类型:

HT66F50

总线频率:

12MHz

********************************************************************/

#include"HT66F50.h"

//IO口重定义---------------------------------------------------

#defineled_20_4//pf1,作为控制led用

//数据类型宏定义-----------------------------------------------

typedefunsignedcharUINT8;//!

<unsigned8bitdefinition

typedefunsignedlongUINT16;//!

<unsigned16bitdefinition

typedefsignedcharINT8;//!

<signed8bitdefinition

typedefsignedlongINT16;//!

<signed16bitdefinition

typedefunsignedcharuint8;//!

<unsigned8bitdefinition

typedefunsignedlonguint16;//!

<unsigned16bitdefinition

typedefsignedcharint8;//!

<signed8bitdefinition

typedefsignedlongint16;//!

<signed16bitdefinition

typedefunsignedcharuchar;//!

<unsigned8bitdefinition

//变量定义---------------------------------------------------

//存储空间相关说明:

中文数据手册26页

//bank0变量---------------------------------------

#pragmarambank0

//时间变量

ucharto_2ms;//2ms统计变量

ucharto_20ms;//20ms统计变量

ucharto_200ms;//200ms统计变量

ucharto_1s;//2s统计变量

ucharto_1m;//1m统计变量

ucharto_1h;//1h统计变量

//bank0或者其他bank的变量-------------------------

#pragmanorambank

//中断向量声明-----------------------------------------------

//中断相关说明:

中文数据手册152页

#pragmavectorisr_timer0@0x14

//子函数声明-------------------------------------------------

voidmcu_init();//单片机初始化

voidvar_init();//变量初始化

voidset_timer();//定时器设置函数

//主函数-----------------------------------------------------

voidmain()

{

mcu_init();//单片机初始化

var_init();//变量初始化

set_timer();//设置定时器

_emi=1;//开总中断

while

(1)

{

//添加用户代码---------------------------

}

}

//mcu寄存器初始化---------------------------------------

voidmcu_init()

{

//振荡器相关说明:

中文手册38页

//_smod=0x03;//上电后默认值为0x03,选择高频振荡器fh作为系统时钟fsys

//中断寄存器相关说明:

中文手册150页

//_intc0=0;//上电后默认值为0

//_intc1=0;//上电后默认值为0

//_intc2=0;//上电后默认值为0

//芯片引脚排列相关说明:

中文手册6页

//输入/输出端口相关说明:

中文手册64页

//把所有的IO口都设置成为输出,请根据需要修改

//注意:

//很多引脚具有复用功能,有些引脚上电后默认不是普通的IO口功能,如A口,

//要把和对应IO口相关的特殊功能取消后才能作为普通IO口使用.

//测试当前IO口是不是普通的IO口功能的方法:

//把IO口先设置为输出高电平,并测试对应的IO是不是高电平,

//再把IO口设置为输出低电平,并测试对应的IO是不是低电平.

//取消A口8个引脚的AD输入功能

_acerl=0;//上电后默认值位0xff

//取消A0,A2,A3,A5的比较器输入输出功能

_cp0c=0;//上电后默认值0x81

_cp1c=0;//上电后默认值0x81

//设置IO口的方向和电平

_pa=0b11111111;

_pac=0b00000000;

_pb=0b00000000;

_pbc=0b00000000;

_pc=0b00000000;

_pcc=0b00000000;

_pd=0b00000000;

_pdc=0b00000000;

_pe=0b00000000;

_pec=0b00000000;

_pf=0b00000000;

_pfc=0b00000000;

}

//变量初始化-----------------------------------

voidvar_init()

{

//把所有的变量区都清为0-------------------------------

//方法1:

优点(代码量少),缺点(不够方法2简单明了)

//清BANK2,1,080H~FFH之间的变量区

_mp1=0x80;

while(_mp1!

=0x00)

{

_bp=2;

_iar1=0;//清bank2对应的空间

_bp=1;

_iar1=0;//清bank1对应的空间

_bp=0;

_iar1=0;//清bank0对应的空间

_mp1++;

}

/*

//方法2:

优点(简单明了),缺点(代码量多)

//清BANK280H~FFH之间的变量区

_mp1=0x80;

_bp=2;

while(_mp1!

=0x00)

{

_iar1=0;

_mp1++;

}

//清BANK180H~FFH之间的变量区

_mp1=0x80;

_bp=1;

while(_mp1!

=0x00)

{

_iar1=0;

_mp1++;

}

//清BANK080H~FFH之间的变量区

_mp0=0x80;

_bp=0;

while(_mp0!

=0x00)

{

_iar0=0;

_mp0++;

}

*/

//设置其他变量的值------------------------------

}

//设置定时器--------------------------------------

//定时器模块相关说明:

中文手册75页

voidset_timer()

{

//禁止所有TM的输入输出引脚,保持对应IO口原来的功能

_tmpc0=0;

_tmpc1=0;

//设置定时器0------------------------------------------------------

//已知总线时钟为高频振荡器的频率12M,

//设置定时溢出模式的时钟源为总线时钟,4分频,则定时器的驱动脉冲频率为3M

//中断频率=3M/tm0a=3M/375=8000

_tm0c0=0;//总线时钟4分频,停止

_tm0c1=0b11000001;//定时/计数器模式,TM0比较器A匹配清除计数器

//TM对应的3个16位寄存器读写时必须遵循以下的原则:

//写:

先写低字节,再写高字节

//读:

先读高字节,再读低字节

_tm0al=0x77;//先写低字节

_tm0ah=0x01;//再写高字节

_t0on=1;//启动定时器0

_t0ae=1;//定时器0比较器A匹配中断请求允许

_mf0e=1;//允许多功能中断0

}

//中断处理函数---------------------------

//注意:

TM0P,TM0A,TM2P,TM2A的中断都属于

//多功能中断M.Funct.0,对应的中断向量地址为0x14,

//因此,当这四种中断有2个或2个以上同时开启时,

//则在它们对应的中断函数中要判断中断请求标志

//才能够确定究竟是发生了什么中断.

//其他的多功能中断也要类似处理.

voidisr_timer0()//timer/event0

{

_t0af=0;//中断标志必须用指令清除

//蜂鸣器管理

/*

if(beep_time>0)

{

buzzer=!

buzzer;

}

else

{

buzzer=0;

}

*/

//溢出频率为8000(周期为0.125ms)

to_2ms++;

if(to_2ms>=16)

{

to_2ms=0;

//2ms平台----------------------

to_20ms++;

if(to_20ms>=10)

{

to_20ms=0;

//20ms平台----------------------

to_200ms++;

if(to_200ms>=10)

{

to_200ms=0;

//200ms平台----------------------

to_1s++;

if(to_1s>=5)

{

to_1s=0;

//1s平台----------------------

led=!

led;

to_1m++;

if(to_1m==60)

{

//分钟平台-----------------

to_1m=0;

to_1h++;

if(to_1h==60)

{

//小时平台-----------------

to_1h=0;

}

}

}

}

}

}

}

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1