?? led.c
字號:
//******************************************************************************
// *
// FileName : led.c ICCAVR V6.31A編譯 *
// Function : 8個LED燈閃爍顯示,入門級試驗 *
// Date : 2006-12-11 *
// Version : 1.0 *
// *
// Author : 開關電源 hongtusy@163.com *
// Company : 電子信息技術咨詢網 http://www.itsn.cn *
// *
//***************************描述與記事*****************************************
//實驗板的AVR程序,C或AVR入門級試驗,8個LED燈閃爍顯示。
//說明:使用延遲程序,間歇點亮或關閉LED燈。
//具體電路可參照使用指南里的說明。PC口輸出1,LED即點亮。
//使用器件:ATMEGA8535,可更換。 使用默認的片內RC振蕩器,1MHz。
//使用的開關:SW1-1~8.SW6-1打開,SW3-8為系統復位端。
//記事:
//******************************************************************************
#include <iom8535v.h> //頭文件,ATmega8535單片機的寄存器定義
#include "macros.h" //可以使用NOP()以及SEI()等指令.
typedef unsigned char uchar; //宏
typedef unsigned int uint;
/************************************************
函 數 名: DelaymS()
功 能: 毫秒級延時函數
輸入參數: 延遲時間/系統晶體
輸出參數: 做相應的延遲處理
描 述: /
***********************************************/
void DelaymS (uint i) //延時函數,參數i為延時時間
{
uint j,k; //雙重延時
for (j=0;j<i;j++)
{
for (k=0;k<=50;k++);
}
}
//************************main***************
void main(void) //主程序
{
DDRC=0xff; //PC口為輸出
while(1) //如果條件為真,1=真,所以死循環執行嵌套部分。
{
PORTC=0xff; //點亮LED
DelaymS(1000); //延遲程序
PORTC=0x00; //關閉LED
DelaymS(1000); //延遲程序
}
}
#if 0
/************************************************
函 數 名: Delay882uS()
功 能: 882微秒級延時函數
輸入參數:
輸出參數:
描 述: 精確延遲函數
***********************************************/
void Delay882uS (uchar i)
{
uchar j;
for (j=0;j<i;j++)
{
asm("del: ldi r16,0xFF ")
asm("loop1: dec r16 ")
asm(" nop ")
asm(" nop ")
asm(" brne loop1 ")
asm(" nop ");
}
}
/************************************************
函 數 名: Delay4740uS()
功 能: 4740微秒級延時函數
輸入參數: 晶振1M,機器周期為1uS。
輸出參數: 延遲時間T=a(4b+3)+c
描 述: 在C中調匯編函數,使用r24,r25不必作特殊的保護工作。
***********************************************/
void Delay4740uS (void)
{
asm(" ldi r24,110 ") //t=1 參數:a
asm("loop1: ldi r25,10 ") //t=1 參數:b
asm("loop2: dec r25 ") //t=1
asm(" nop ") //t=1,校準用,需改動公式。
asm(" brne loop2 ") //t=2/1
asm(" dec r24 ") //t=1
asm(" brne loop1 ") //t=2/1
asm("nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop"); //t=1,校準用,參數:c
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -