AVR 單片機(jī)實(shí)現(xiàn) LED 燈閃爍
LinkedInATmega16 有 4 個(gè) 8 位的雙向 I/O 端口 PA, PB, PC, PD, 他們對(duì)外對(duì)應(yīng) 32 個(gè) I/O 引腳, 每一位都可以獨(dú)立的用于邏輯信號(hào)的輸入和輸出. 在 5V 工作電壓下, 輸出高電平時(shí), 每個(gè)引腳可輸出達(dá) 20mA 的驅(qū)動(dòng)電流; 而輸出低電平時(shí), 每個(gè)引腳可以吸收最大 40mA 的電流.
本文引用地址:http://m.butianyuan.cn/article/201807/384418.htmAVR系列單片機(jī)所有的 I/O 寄存器可以通過(guò)兩種不同的方法來(lái)訪問(wèn): 使用對(duì) I/O 寄存器訪問(wèn)的 IN 和 OUT 專用指令或者使用對(duì) SRAM 訪問(wèn)的指令. 其中 IN, OUT 指令周期為 1 個(gè)時(shí)鐘周期另外, I/O 寄存器地址范圍在 $00 - $1F 之間的寄存器(前 32 個(gè))還可以通過(guò)指令實(shí)現(xiàn)位操作和位判斷跳轉(zhuǎn). 如: SBI(I/O寄存器指定位置 1), CBI(I/O寄存器指定位清 0), SBIS(I/O寄存器指定位為 1 跳轉(zhuǎn)), SBIC(I/O寄存器指定位為 0 跳轉(zhuǎn)).詳細(xì)的看手冊(cè)才是王道.
仿真電路簡(jiǎn)圖(LED可能看不到, 另存為或者新窗口打開(kāi)看吧):
測(cè)試程序, 更改可以觀察不同現(xiàn)象, 有助理解. 和 51 的不同就是 IO 口的方向控制.
/*
* AVRGCC.c
*
* Created: 2012/5/27 18:09:54
* Author: KISSMonX
*/
#define F_CPU 4000000UL
#include
#include
int main(void)
{
PORTC = 0x80; // PC 口的第 0/7 位輸出 0/1, LED1 和 LED2 都亮.
DDRC = 0x81; // 定義 PC 口的第 0 和 7 位為輸出方式
_delay_ms(2000); // 開(kāi)始時(shí)兩個(gè) LED 都要亮, 持續(xù) 2s 后進(jìn)入循環(huán).
while(1)
{
_delay_ms(200); // 庫(kù)函數(shù) ms 延時(shí)函數(shù), 0.2s
PORTC = ~PORTC; // PC 口第 0/7 位取反后輸出
}
return 0;
}
評(píng)論