⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 avrinit.c

📁 Atmega16-ucosii的移植范例
💻 C
字号:
#include "includes.h"

/*********************************************************************

*********************************************************************/
unsigned char displaycode(const unsigned char discodep)
{
	unsigned char discode=0x00;
	switch(discodep)
	{
		case '0':
		case   0:	discode=0x3f;	break;
		case '1':
		case   1:	discode=0x06;	break;
		case '2':
		case   2:	discode=0x5b;	break; 
		case '3':
		case   3:	discode=0x4f;	break;
		case '4':
		case   4:	discode=0x66;	break;
		case '5':
		case   5:	discode=0x6d;	break;
		case '6':
		case   6:	discode=0x7d;	break;
		case '7':
		case   7:	discode=0x07;	break;
		case '8':
		case   8:	discode=0x7f;	break;
		case '9':
		case   9:	discode=0x6f;	break;
		case 'A':
		case  10:	discode=0x88;	break;
		case 'B':
		case  11:	discode=0x83;	break;
		case 'C':
		case  12:	discode=0xc6;	break;
		case 'D':
		case  13:	discode=0xa1;	break;
		case 'E':
		case  14:	discode=0x86;	break;
		case 'F':
		case  15:	discode=0x8e;	break;
		case 'G':	discode=0x3d;	break;
		case 'H':	discode=0x89;	break;
		case 'I':	discode=0xcf;	break;
		case 'J':	discode=0xe1;	break;
		case 'K':	discode=0x8f;	break;
		case 'L':	discode=0xc7;	break;
		case 'M':	discode=0xaa;	break;
		case 'N':	discode=0xab;	break;
		case 'O':	discode=0xa3;	break;
		case 'P':	discode=0x8c;	break;
		case 'Q':	discode=0x98;	break;
		case 'R':	discode=0xcc;	break;
		case 'S':	discode=0xd2;	break;
		case 'T':	discode=0xce;	break;
		case 'U':	discode=0xc1;	break;
		case 'V':	discode=0xe3;	break;
		case 'W':	discode=0xe2;	break;
		case 'X':	discode=0x9b;	break;
		case 'Y':	discode=0x6e;	break;
		case 'Z':	discode=0x49;	break;		
		case '-':   discode=0x40;	break;
		case '.':   discode=0x80;	break;

        //set a b c.....
        case 0x8a:  discode=0x01;	break;
        case 0x8b:  discode=0x02;	break;
        case 0x8c:  discode=0x04;	break;
        case 0x8d:  discode=0x08;	break;
        case 0x8e:  discode=0x10;	break;
        case 0x8f:  discode=0x20;	break;
        case 0x90:  discode=0x40;	break;
        case 0x91:  discode=0x80;	break;

        case 0x92:  discode=0x11;	break;
        case 0x93:  discode=0x22;	break;
        case 0x94:  discode=0x44;	break;
        case 0x95:  discode=0x88;	break;
        case 0x96:  discode=0x03;	break;
        case 0x97:  discode=0x06;	break;
        case 0x99:  discode=0x0c;	break;
        case 0x9a:  discode=0x18;	break;
        case 0x9b:  discode=0x30;	break;
        case 0x9c:  discode=0x60;	break;
        case 0x9d:  discode=0xc0;	break;

        case 0x9e:  discode=0x07;	break;
        case 0x9f:  discode=0x1c;	break;
        case 0xa0:  discode=0x38;	break;
        case 0xa1:  discode=0x70;	break;
        case 0xa2:  discode=0xe0;	break;
        case 0xa3:  discode=0x0f;	break;
        case 0xa4:  discode=0x1e;	break;
        case 0xa5:  discode=0x3c;	break;
        case 0xa6:  discode=0x78;	break;
        case 0xa7:  discode=0xf0;	break;
        case 0xa8:  discode=0xff;	break;


		default : 	discode=0xaa;	break;	
	}
	return(discode);
}
void LedRefresh(unsigned char data,unsigned char bit)
{
    data=displaycode(data);
    switch(bit)
    {
        case 1:bit=(1<<0);break;
        case 2:bit=(1<<1);break;
        case 3:bit=(1<<2);break;
        case 4:bit=(1<<3);break;
        case 5:bit=(1<<4);break;
        case 6:bit=(1<<5);break;
        case 7:bit=(1<<6);break;
        case 8:
               bit=(1<<7);
               break;
        case 0xff:
               bit=0xff;  
               break;
        default:
               bit=0x00;  
               break;
    }

    LedDrive(data,bit);
}

void port_init(void)
{
    PORTA = 0x00;
    DDRA  = 0x00;
    PORTB = 0x00;
    DDRB  = 0x00;
    PORTC = 0b11111000; //m103 output only
    DDRC  = 0x00;
    PORTD = 0x00;
    DDRD  = 0x00;
    
    DDRA=0xff;
    DDRC|=0b00000100;
    DDRD=0xff;
    
}
//TIMER0 initialize - prescale:1024
// WGM: Normal
// desired value: 100Hz
// actual value: 100.160Hz (0.2%)
void timer0_init(void)
{    
    TIMSK&=0xFC;
    #if OS_TICKS_PER_SEC <= (F_CPU/1024/256)
		#error "OS_TICKS_PER_SEC <  (F_CPU/1024/256) "
	#endif

	TCCR0 = 0x00; //stop
	OCR0  = (F_CPU/1024/OS_TICKS_PER_SEC);
	TCNT0 = 0x00; //set count
    TCCR0=(1<<WGM01)|0x05; //start timer
    TIMSK |= 0x02; //timer interrupt sources
}
//TIMER2 initialize - prescale:1024
// WGM: Normal
// desired value: 100Hz
// actual value: 100.160Hz (0.2%)
void timer2_init(void)
{
    TCCR2 = 0x00; //stop
    ASSR  = 0x00; //set async mode
    TCNT2 = 0xB2; //setup
    OCR2  = 0x4E;
    TCCR2 = 0x07; //start
    TIMSK|= 0x90;
}
//call this routine to initialize all peripherals
void TargetInit(void)
{
#if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register  */
    OS_CPU_SR  cpu_sr;

    cpu_sr = 0;   
#endif
    //stop errant interrupts until set up
    OS_ENTER_CRITICAL();
    MCUCR = 0x00;
    GICR  = 0x00;
    
    port_init();
    timer0_init();
    timer2_init();

    OS_EXIT_CRITICAL();

    //all peripherals are now initialized
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -