日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单片机实验-定时中断

發布時間:2024/7/23 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机实验-定时中断 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.實驗目的

1.掌握51單片機定時器工作原理。

2.掌握51單片機中斷系統工作原理。

3.掌握定時器初始化編程。

4.掌握中斷程序的編寫和調試。

二.實驗設備和器件

1.KEIL軟件

2.PROTEUS仿真軟件 ??

3.偉福實驗箱

三.實驗內容

(1)編程實現:在單片機外中斷0引腳接一個單脈沖源作為外部輸入信號,通過發光二極管顯示中斷次數,發光二極管初始狀態為全滅

  • 電路圖:

?

  • 代碼:

#include<reg52.h> ?

#include<intrins.h> ???

#define uint unsigned int ?

#define uchar unsigned char

uchar b=0; ?

void delay()//延時函數

{

?uint a=30000;

?while(a--)_nop_();

}

void main()//主函數

{

?????P0=0xff; //初始化燈

?????INT0==1;//打開外部中斷0

?????EA=1; ??//開總中斷

?????EX0=1; ??//允許中斷0

?IT0=1; ?//設置外部中斷0邊沿觸發

?while(1);

?}

void srv_INT0() interrupt 0 ???//中斷服務程序

{

???b=b+1; ??

???P0=0xff-b; ??

???delay();

?}

  • 分析:

1、外部中斷0為邊沿觸發,則初始化時需要將IT0置1;

2、在proteus仿真中,因為低電平燈才會亮,則P0不能直接等于計數的b,需要用0xff-b,才能是相應的燈亮滅

?

(2)模擬一個交通燈時序,要求綠燈6s,紅燈4s,黃燈2s,循環實現

  • 電路圖:

?

  • 代碼:

#include <reg51.h>

#include <intrins.h>

void delay1s(unsigned char k);

void main()

{

TMOD =0x01; //定時器工作方式1

TH0=0x3C;

TL0=0xB0;//定時器初值15536,定時100ms

while(1)

{

P0=0xfe; //green ,D0作為綠燈

delay1s(6);//延時6s

P0=0xfd; ??//red ,D1作為紅燈

delay1s(4);//延時4s

P0=0xfb; ??//yellow,D2作為黃燈

delay1s(2);//延時2s

}

}

?

void delay1s(unsigned char m) ?//定時器0采用查詢的方式

{

unsigned char k1,k2;

TH0=0x3C;TL0=0xB0;//2^16-100x10^3/2=65536-50000=15536-3cb0,定時100ms

TR0=1;//開啟定時器0

for(k1=0;k1<m;k1++) // 定時每次是1s,根據m值的不一樣,決定總定時時間

{

for(k2=0;k2<10;k2++)//定時器0定時100ms,循環10次,1s

{

while(!TF0); ??//查詢方式

TF0=0; ??//清除

TH0=0x3C;TL0=0xB0;

}

}

}

  • 分析:

1、定時器處理方式有中斷、查詢

2、實驗箱設置的系統時鐘為12MHz--1us

???Proteus仿真設置的系統時鐘為6MHz--2us

3、定時器0定時100ms,循環10次之后定時1s,根據相應的m值,決定延時多長時間

(3)編程實現:在實驗2基礎上,加一個外中斷請求信號來處理緊急情況,當外中斷請求發生時,進入緊急狀態,紅燈閃爍5s,之后退出,繼續原來的狀態執行。

  • 電路圖:

?

  • 代碼:

#include <reg51.h>

#include <intrins.h>

void delay1s(unsigned char k);

void main()

{

TMOD =0x01;

TH0=0x3C;

TL0=0xB0;

IE=0x81; ?//允許總中斷,允許外部中斷0

TCON=0x01; //允許外部中斷0

while(1)

{

P0=0xfe; //green

delay1s(6);

P0=0xfd; ??//red

delay1s(4);

P0=0xfb; ??//yellow

delay1s(2);

}

}

void int_0(void) interrupt 0

{

??while(1)

{

??P0 =0xfd;

??delay1s(5);

??P0=0xff;

??delay1s(5);

???}

?}

void delay1s(unsigned char m) ?//定時器0采用查詢的方式

{

unsigned char k1,k2;

TH0=0x3C;TL0=0xB0;//2^16-100x10^3/2=65536-50000=15536----3cb0,定時00ms

TR0=1;//開啟定時器0

for(k1=0;k1<m;k1++) // 定時每次是1s,根據m值的不一樣,決定總定時時間

{

for(k2=0;k2<10;k2++)//定時器0定時100ms,循環10次,1s

{

while(!TF0); ??//查詢方式

TF0=0; ??//清除

TH0=0x3C;TL0=0xB0;

}

}

}

  • 分析:

1、其他同實驗二

2、用到外部中斷0,需要允許中斷0,當執行中斷0時,紅燈持續閃爍

總結

以上是生活随笔為你收集整理的单片机实验-定时中断的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。