• 实验(六):定时器实验


    一、实验目的与任务

            实验目的:

                    1.掌握定时/计数器的中断法工作原理;

                    2.熟悉C51编程与调试方法。

            任务:

                    1. 运行Keil开发环境,完成定时器软件编程;

                    2. 建立Proteus仿真模型;

                    3.完成系统仿真与调试。

    二、实验内容

            1. 利用片内定时器/计数器进行定时,定时间隔3s;

            2. 选择I/O口接入发光二极管;

            3. 使用AT89S51单片机的定时器/计数器T1控制LED每隔3秒点亮一次(即亮3秒,灭3秒,如此反复)。

    三、实验内容

    (1)软件实现:

    实验步骤:

            1.运行Keil uVision5 开发环境,按照“模块化单片机教学实验平台配套的实验指导书1.2.3 节”介绍的方法建立程esimlab6. uvproj,CPU 为AT89S51,包含启动文件STARTUP.A51。

            2.输入源程序,在Keil uVision5 开发环境中,建立源程序esimlab6.c,将上述程序加入该程序文件。并将该文件加入工程esimlab6.uvproj。

            3.设置工程esimlab6. uvproj 属性,将其晶振频率设置为12MHz,选择输出可执行文件(HEX 文件),仿真方式为“Use Simulator”。

            4.构造(Build)工程esimlab6.uvproj。如果输入有误进行修改,直至构造正确,生成可执行程序 esimlab6.hex 为止。

    (2)Proteus仿真:

    实验步骤:

            1.运行Proteus 开发环境,建立工程,新建原理图设计文件esimlab6. Pdsprj,参考图一。

     图一 原理图实例

            2.设置单片机属性,将其晶振频率设置为12MHz,载入KEIL生成的文件esimlab6.hex。

            3.运行仿真并观察结果。

    四、实验报告

    main.c

    1. #include
    2. void Timer1_Init(void); //中断初始化函数
    3. void main(){
    4. Timer1_Init();//中断初始化
    5. P1_5 = 0;
    6. while(1){
    7. }
    8. }
    9. void Timer1_Init(void) //1毫秒@12.000MHz
    10. {
    11. TMOD &= 0x0F; //设置定时器模式
    12. TMOD |= 0x10; //设置定时器模式
    13. TL1 = 0x18; //设置定时初值
    14. TH1 = 0xFC; //设置定时初值
    15. TF1 = 0; //清除TF1标志
    16. TR1 = 1; //定时器1开始计时
    17. ET1 = 1;
    18. EA = 1; //中断总允许
    19. PT1 = 0;
    20. }
    21. void Timer1_Routine() interrupt 3 //定时器1中断函数
    22. {
    23. static unsigned int count1 = 0;
    24. TL1 = 0x18; //设置定时初值
    25. TH1 = 0xFC; //设置定时初值
    26. count1++;
    27. if(count1 == 3000){ //每三秒转换一次状态
    28. count1 = 0;
    29. P1_5 = ~P1_5;
    30. }
    31. }

            TO、T1 都具有定时器和计数器两种工作模式,不论是工作在定时器模式还是计数器模式,实质都是对脉冲信号进行计数,只不过是计数信号的来源不同。计数器模式是对加在T0P3.4)和T1P3.5)两个引脚上的外部脉冲进行计数;而定时器模式是对单片机的系统时钟信号经片内12分频后的内部脉冲信号(脉冲信号周期=机器周期)计数。由于系统时钟频率是定值,所以可根据计数值计算出准确的定时时间。两个定时器/计数器属于增1计数器,即每对一个脉冲计数,则计数器赠1 

  • 相关阅读:
    Linux中_Ubuntu上_安装Windows软件_微信_企业微信_等
    java http
    Mapper层注解讲解
    【软件测试】软件测试工程师职位核心任务?测试人测试职业发展?
    常见排序实现
    linux中du的用法
    去中心化衍生品协议内卷,ZKX 能否通过差异化道路突出重围?
    Shell系统学习之函数
    D. Yet Another Problem(异或/位运算/二分)
    数据库:什么是数据库,有哪些数据库,数据库用来干什么,图导,拓展
  • 原文地址:https://blog.csdn.net/qq_61228493/article/details/128129517