完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一,打开文件(可以随文下载放置在文档中打开)。(如下图1所示)
图1 二,调整原理图大小,适合可视,另存工程文件。(如下图2,3,4所示) 图2 图3 图4 三,点击Source Code标签。(如下图5所示) 图5 四,编辑main.c 代码如Proteus8.9 VSM Studio WINAVR编译器仿真ATmega16系列a12_可编程定时计数器 (如下图6所示) 图6 五,Main.c 代码: //----------------------------------------------------------------- // 名称: 可编程外围定时计数器8253应用 //----------------------------------------------------------------- // 说明: 本例运行时,按下8255 PC端口按键K1可启动8253定时器0,定时器0 // 工作于方式5,程序给8253提供随机的定时初值,定时到达后GATE0 // 触发INT0中断,中断程序输出提示音,并重置定时器. // //----------------------------------------------------------------- #include “myfunc01.h” //待显示信息缓冲 extern INT8U Disp_Buffer[8]; //上次按键状态 extern INT8U Pre_Key_State; //对TCO设置的定时计数初值 extern volatile INT16U TC0_Count; //----------------------------------------------------------------- // 主程序 //----------------------------------------------------------------- int main() { INT8U i; INT16U cnt; DDRA= 0xFF; DDRB= 0xFF; DDRD= ~(_BV(PD2) | _BV(PD3)); srand(87); MCUCR |= 0x82; COM_8255= 0B10001001; GICR= 0x40; while(1) { cnt= TC0_Count; for(i= 0; i< 8; i++) { Disp_Buffer= cnt % 10; cnt /= 10; PB_8255= (INT8U)SEG_CODE[Disp_Buffer]; _delay_ms(2); Key_Process(); } } } //----------------------------------------------------------------- // INT0中断子程序 //----------------------------------------------------------------- ISR (INT0_vect) { Sounder(); Set_8253_TC0(); } Myfunc01.h //****************************************************************************************** #ifndef MYFUNC01_H #define MYFUNC01_H //#define F_CPU 2000000UL #include #include #include #define INT8U unsigned char #define INT16U unsigned int //8255 PA,PB,PC端口及命令端口地址定义 //(定义前面加可使得后面使用时不用再加) #define PA_8255 (INT8U)0xFFB0 #define PB_8255 (INT8U)0xFFB1 #define PC_8255 (INT8U)0xFFB2 #define COM_8255 (INT8U)0xFFB3 //8253 定时/计数器0及命令端口地址定义 #define TC0_8253 (INT8U*)0xFF70 #define COM_8253 (INT8U*)0xFF73 //8253 定时/计数器0/1的门控制位操作定义 #define TC0_G1() PORTB |= _BV(PB6) #define TC0_G0() PORTB &= ~_BV(PB6) //蜂鸣器定义 #define BEEP() PORTB ^= _BV(PB0) //0-9的共阳数码管段码表,最后一位为黑屏 static INT8U SEG_CODE[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF }; void Sounder(); void Set_8253_TC0(); void Key_Process(); #endif 六,点击构建工程按钮,编译工程。(如下图7所示) 图7 七,点击窗口左下方仿真按钮,可见虚拟数字屏显示。 (如下图8,9,10所示) 图8 图9 图10 八,选择release,点击构建工程按钮,编译工程生成Hex文件。(如下图11所示) 图11 附件Proteus8.9 VSM Studio WINAVR编译器仿真ATmega16系列a12_可编程定时计数器在已安装Proteus8.9的计算机文件夹中打开即可 |
|
|
|
只有小组成员才能发言,加入小组>>
3320 浏览 9 评论
2998 浏览 16 评论
3496 浏览 1 评论
9066 浏览 16 评论
4089 浏览 18 评论
1186浏览 3评论
612浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
602浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2339浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1899浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 11:38 , Processed in 1.448515 second(s), Total 51, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号