на 292
По мне, для начального уровня - чересчур непонятно.
Начну с того, что Керниган и Риччи не помогут, команды сильно отличаются. Югославский английский даже Лингва понимает с трудом, а на Великом и Могучем создатели не написали ни буквы в отличие, скажем, от испанского. В результате любое мелкое затруднение превращается в недельную остановку и спросить часто не у кого.
После ASM я решил остановиться на Mikro-продуктах, пробовал Basic, теперь вот С. И там, и тут - чудесные оболочки, все очень удобно, даже красиво - потому м.быть и не бросил еще. С ассемблером было гораздо проще (Дж. Мортон здорово помогал), здесь же почти полный вакуум - сказывается малая распостраненность продуктов и отсутствие русс. описаний (eng изучал ещё в незапамятные времена).
Чтобы не быть голословным привожу свежую затыку:
// ************************************
// Автор: Lyon *
// Дата:17.04.2010 *
// Схема Рис ATtiny261 -autovolt.gif *
// Версия: 1.0 *
// Имя файла: AutoVolt *
// Для AVR: ATtiny261 *
// Тактовая частота: 4000000 *
//*************************************
//************************** Declaration **************************************
//Global Declaration
unsigned ADCout;
unsigned PrtA[2];
//Function Declaration
unsigned Indicat(char Digit);
unsigned short DgtCnge(char Dcount, char Scount);
unsigned short Amask(char Anum);
unsigned short Bmask(char Bnum);
//************************** Interrupt routine *********************************
unsigned short ADCCompl() org 0x000B //ADC Conversion Complete
{
ADCout = 456; // для попробы
//ADCout = ADCH;
Indicat();
}
//*************************** Interrupt routine END ***************************
//******************************** Subroutine **********************************
unsigned Indicat(char Digit)
{
Digit = ADCout / 100; //extract 100s digit j = i div 100
PrtA[0] = Amask(Digit);
Digit = (ADCout / 10)% 10; //extract 10s digit
PrtA[1] = Amask(Digit);
Digit = ADCout % 10; // extract 1s digit
PrtA[2] = Amask(Digit);
Delay_ms (10);
}
unsigned short DgtCnge(char Dcount, char Scount)
{
Dcount = Bmask(Dcount);
PORTB = Dcount;
PORTA = PrtA[Scount];
Scount ++;
if (Scount › 3u)
Scount = 0;
Dcount = Scount;
}
unsigned short Amask( char Anum) { // setup led to matrix display a number 0-9
switch (Anum) {
case 0 : return 0xFC; //display 0
case 1 : return 0x60; //display 1
case 2 : return 0xDA; //display 2
case 3 : return 0xF2; //display 3
case 4 : return 0x66; //display 4
case 5 : return 0xB6; //display 5
case 6 : return 0xBE; //display 6
case 7 : return 0xE0; //display 7
case 8 : return 0xFE; //display 8
case 9 : return 0xF6; //display 9
}
}
unsigned short Bmask ( char Bnum)
{
switch (Bnum) {
case 0 : return 0x01;
case 1 : return 0x02;
case 2 : return 0x04;
}
}
//******************************* Subroutine END *******************************
//*********************************** MAIN *************************************
void main() { // (unsigned short int ADCout)
do {
DDRA = 0xFF;
PortA = 0x00;
DDRB = 0x8F; //DDRB= 0x8F (10001111)-Bit 0-3 -выход на декады,Bit 4-5 -кварц,Bit7-не исп-ся
PortB = 0x01; //PortB=00000001 - нач.состояние
ADMUX = 0x29; //ADMUX = 0x29 (00101001),
//Bit 7:6 - REFS1:REFS0:Voltage Reference Selection,Bit5-ADLAR:ADC LeftAdjustResult
//ADMUX = Bit 0..3 выбор источника для ADC: 01001 - ADC9 (PB6 = Pin9 ATiny 261)
ADCSRA = 0xCE; //ADCSRA = 0xCE(11001110)
//Bit7-ADEN:ADC Enable,Bit6-ADSC:ADC Start Conversion ,Bit3–ADIE:ADC Interrupt Enable
//ADPS2 ADPS1 ADPS0 - Division Factor Bits 2:0 - ADPS2:0: ADC Prescaler Select Bits
//110-64 (101-32; 111-12
![Горд собой](images/smilies/icon_dovl.gif)
// ADCSRB-00000000-Bits 2:0- ADTS2:0: ADC Auto Trigger Source (000-Free Running mode)
DIDR0 = 0xFF; // Digital input buffers on ADC0: Off, ADC1: Off, ADC2: Off, Aref: Off
// ADC3: Off, ADC4: Off, ADC5: Off, ADC6: Off
DIDR1 = 0xF0; // Digital input buffers on ADC7: Off, ADC8: Off, ADC9: Off, ADC10: Off
SREG_I_bit = 1;
}
while (1);
}
//********************************* MAIN END ***********************************
При компиляции MikroC отрыгивает ошибку номер 314, а что она означает узнать не могу.
0 1 mikrocAVR.exe -MSF -DBG -pATTINY261 -Y -DL -O11111114 -fo4 -N"D:\WRKSPACE\AVR\Auto_V\AutoVolt.mcpav" -SP"C:\Atmel\mikroC PRO\defs\" -SP"D:\WRKSPACE\AVR\Auto_V\" -SP"C:\Atmel\mikroC PRO\Uses\LTE64KW\" -SP"C:\Atmel\mikroC\defs\" -SP"C:\Atmel\mikroC\Uses\LTE
0 1501 Specified search path does not exist: 'C:\Atmel\mikroC\defs'
0 1501 Specified search path does not exist: 'C:\Atmel\mikroC\Uses\LTE64KW'
0 126 All files Preprocessed in 16 ms
0 122 Compilation Started AutoVolt.c
25 314 Not enough parameters AutoVolt.c
26 1503 Result is not defined in function: 'ADCCompl' AutoVolt.c
38 1503 Result is not defined in function: 'Indicat' AutoVolt.c
48 1503 Result is not defined in function: 'DgtCnge' AutoVolt.c
0 102 Finished (with errors): 02 мая 2010, 16:24:40 AutoVolt.mcpav
Такие , вот , дела.