Nguyên văn bởi th43v3r
Xem bài viết
Thông báo
Collapse
No announcement yet.
Lập trình AVR bằng CodeVisionAVR C Compiler cho người mới bắt đầu
Collapse
X
-
các bác xem hộ chương trình lập trình đóng mở cửa dùng ATmega32 giúp em với nó báo lổi hoài em mò cả tuần mà không ra.
chương trình
#include <mega32.h>
#include <1wire.h>
#include <delay.h>
#include <lcd.h>
#include <string.h>
#include <stdlib.h>
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#define DS1990_FAMILY_CODE 1 // khai bao ma family_code la 01
#define SEARCH_ROM 0xF0 // lenh search rom la 0X0F
#define MAX_DEVICES 8
unsigned char rom_code[MAX_DEVICES][9]; //khai bao kieu mang
unsigned char devices,i;
unsigned char don []=" ---ABCD---" ;
unsigned char don1[]=" GIAO TIEP DS1990A" ;
unsigned char don5[]=" ATMEGA32 " ;
unsigned char don2[]="TRUY XUAT THANH CONG";
unsigned char don3[]=" MA SO KHONG DUNG ";
unsigned char don4[]=" HAY KET NOI DS1990A ";
unsigned char string[] ;
// 1 Wire Bus functions
#asm
.equ __w1_port=0x1B ;PORTA
.equ __w1_bit=0
#endasm
void main(void){
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x7F;
PORTC=0x00; // khai bao PORTC xuat du lieu
DDRC=0xFF;
PORTD=0x00;
DDRD=0xFF;
ACSR=0x80;
SFIOR=0x00;
lcd_init(20); //KHOI TAO LCD 20 DONG
lcd_clear(); // XOA LCD
_lcd_ready(); // CHO LCD READY
for (i=0;i< strlen(don);i++) // XUAT CHUOI " ---ABCD--" RA lcd;
{
lcd_putchar(don[i]);
};
lcd_gotoxy(0,1); // CHUYEN CON TRO LCD XUONG DONG 2;
for (i=0;i< strlen(don1);i++) // XUAT CHUOI " GIAO TIEP DS1990A" ;
{
lcd_putchar(don1[i]);
};
lcd_gotoxy(0,2); // CHUYEN CON TRO LCD XUONG DONG 3;
for (i=0;i< strlen(don5);i++) // XUAT CHUOI "ATMEGA32 " ;
{
lcd_putchar(don5[i]);
};
while (1)
{ w1_init(); // KHOI TAO W1
devices=w1_search(SEARCH_ROM,&rom_code[0][0]);//TIM THIET BI KET NOI VOI BUS
string[1]= rom_code[0][1]; // DOC MA SERIAL NUMBER
string[2]= rom_code[0][2];
string[3]= rom_code[0][3];
if (devices)
{ // SO SANH NEU DUNG MA LA "123456" THI CHO PHEP
if (string[1]== 0x56 &&string[2]== 0x34 && string[3]== 0x12)
{
lcd_gotoxy(0,3); // CHUYEN CON TRO LCD XUONG DONG 3;
for (i=0;i< strlen(don2);i++) // XUAT CHUOI "TRUY XUAT THANH CONG";
{
lcd_putchar(don2[i]);
PIND.0=1; // CHO PHEP DONG CO CHAY
};
}
else {
lcd_gotoxy(0,3); // CHUYEN CON TRO LCD XUONG DONG 3;
for (i=0;i< strlen(don3);i++) // XUAT CHUOI "MA SO KHONG DUNG";
{
lcd_putchar(don3[i]);
PIND.0=0; // DONG CO DUNG
} ;
} ;
}
else {
lcd_gotoxy(0,3); // CHUYEN CON TRO LCD XUONG DONG 3;
for (i=0;i< strlen(don4);i++) //" HAY KET NOI DS1990A ";
{
lcd_putchar(don4[i]);
};
};
};}
Comment
-
Cảm ơn anh nhưng em sửa lại rùi mà không được .Nó báo lổi thế này ạ!
THU.C(8): error C141: syntax error near '.'
THU.C(8): error C129: missing ';' before '__lcd_port'
thu.c(9): warning C315: unknown #directive 'endasm'
thu.c(24): warning C315: unknown #directive 'asm'
thu.c(27): warning C315: unknown #directive 'endasm'
Target not created
Comment
-
các cao thủ test giúp mình chương trình cho ATMEGA8 này có chạy được không ?
mega8 spwm program
/ / ICC-AVR application builder:2011-1-7 11:30:51
/ / Target: M8
/ / Crystal: 8.0000Mhz
# Include <iom8v.h>
# Include <macros.h>
# Define INT0 6
//===================== Period is 20ms, spwm frequency of 20k =================== ========//
short list [] = {1,4,7,10,13,16,19,22,25,28,31,34,37,39,42,45,48,5 1,54,57,60,62,
65,68,71,74,76,79,82,84,87,90,92,95,97,100,103,105 ,108,110,112,115,117,119,
122,124,126,128,131,133,135,137,139,141,143,145,14 7,149,151,152,154,156,157,
159,161,162,164,165,167,168,169,171,172,173,174,17 6,177,178,179,180,181,182,
182,183,184,185,185,186,186,187,187,188,188,189,18 9,189,189,189,189,189,189,
189,189,189,189,189,189,188,188,187,187,186,186,18 5,185,184,183,182,182,181,
180,179,178,177,176,174,173,172,171,169,168,167,16 5,164,162,161,159,157,156,
154,152,151,149,147,145,143,141,139,137,135,133,13 1,128,126,124,122,119,117,
115,112,110,108,105,103,100,97,95,92,90,87,84,82,7 9,76,74,71,68,65,62,60,57,
54,51,48,45,42,39,37,34,31,28,25,22,19,16,13,10,7, 4,1};
//===================== Period is 20ms, spwm frequency of 20k =================== ========//
int count, zf = 0;
void port_init (void)
{
PORTB = 0x00;
DDRB = 0xFF; / / 06; b port output
PORTC = 0x00;
DDRC = 0xFF; / / c port output
PORTD = 0x00;
DDRD = 0x00; / / d input ports
}
/ / TIMER1 initialize - prescale: 1
/ / WGM13: 0 = 10) PWM phz correct, TOP = ICR1
/ / Desired value: 10KHz
/ / Actual value: 10.000KHz (0.0%)
void timer1_init (void)
{
TCCR1B = 0x00; / / stop
TCNT1H = 0xFF; / / setup
TCNT1L = 0x38;
OCR1AH ??= 0x00;
OCR1AL = 0xC8;
OCR1BH = 0x00;
OCR1BL = 0xC8;
ICR1H = 0x00;
ICR1L = 200; / / 50us cycle carrier
TCCR1A = 0xA2; / / 10100010 top to update OCR1A OCR1B, compare match count is cleared up, otherwise set
TCCR1B = 0x11; / / start Timer 00010001 clk irrespective of frequency, phase correct PWM
TIMSK | = 0x20; / / timer interrupt sources that can capture interrupt
}
# Pragma interrupt_handler timer1_capt_isr: 6
void timer1_capt_isr (void)
{
OCR1A = 500;
OCR1B = 500;
/ / PORTB ^ = 0x10;
/ / 2 1. Spwm
/ /
/ / 43180
/ /
/ /
if (zf)
{
if (count <200)
{
if (count == 1) / / 2 # at this time was off the tube
{
/ / PORTB & = ~ BIT (3); / / 3 # has been off the tube
PORTB | = BIT (4); / / open the tube 4 #
}
OCR1A = list [count + +]; / / open the tube # 1
}
else if ((count> = 200) & & (count <400))
{
if (count == 200)
{
PORTB & = ~ BIT (4); / / turn off the tube 4 #
}
if (count == 201) / / At this point the tube was shut down # 1
{
PORTB | = BIT (3); / / pipe open 3 #
}
OCR1B = list [count + + -200]; / / 2 # tube opening
}
else
{
count = 0; / / 2 # tube has been turned off
PORTB & = ~ BIT (3); / / turn off the tube # 3
/ / PORTB | = BIT (4); / / open the tube 4 #
OCR1A = list [count + +]; / / open the tube # 1
}
}
else;
}
/ / Call this routine to initialize all peripherals
void init_devices (void)
{
/ / Stop errant interrupts until set up
CLI (); / / disable all interrupts
port_init ();
timer1_init ();
SEI (); / / re-enable interrupts
/ / All peripherals are now initialized
}
/ /
void main (void)
{
init_devices ();
/ / Insert your functional code here ...
zf = 1;
OCR1A = 500;
OCR1B = 500;
PORTB = 0;
while (1);
}
Comment
-
Nguyên văn bởi lenguyen225 Xem bài viếtCảm ơn anh nhưng em sửa lại rùi mà không được .Nó báo lổi thế này ạ!
THU.C(8): error C141: syntax error near '.'
THU.C(8): error C129: missing ';' before '__lcd_port'
thu.c(9): warning C315: unknown #directive 'endasm'
thu.c(24): warning C315: unknown #directive 'asm'
thu.c(27): warning C315: unknown #directive 'endasm'
Target not created
Mình đã kiểm tra và không thấy lỗi nữa mà, Bạn xem lại xem.
This program was produced by the
CodeWizardAVR V1.24.8d Professional
Automatic Program Generator
© Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 4/4/2011
Author : F4CG
Company : F4CG
Comments:
Chip type : ATmega32
Program type : Application
Clock frequency : 4.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 512
************************************************** ***/
#include <mega32.h>
#include <1wire.h>
#include <delay.h>
#include <lcd.h>
#include <string.h>
#include <stdlib.h>
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#define DS1990_FAMILY_CODE 1 // khai bao ma family_code la 01
#define SEARCH_ROM 0xF0 // lenh search rom la 0X0F
#define MAX_DEVICES 8
unsigned char rom_code[MAX_DEVICES][9]; //khai bao kieu mang
unsigned char devices,i;
unsigned char don []=" ---ABCD---" ;
unsigned char don1[]=" GIAO TIEP DS1990A" ;
unsigned char don5[]=" ATMEGA32 " ;
unsigned char don2[]="TRUY XUAT THANH CONG";
unsigned char don3[]=" MA SO KHONG DUNG ";
unsigned char don4[]=" HAY KET NOI DS1990A ";
unsigned char string [10] ;
// 1 Wire Bus functions
#asm
.equ __w1_port=0x1B ;PORTA
.equ __w1_bit=0
#endasm
void main(void){
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x7F;
PORTC=0x00; // khai bao PORTC xuat du lieu
DDRC=0xFF;
PORTD=0x00;
DDRD=0xFF;
ACSR=0x80;
SFIOR=0x00;
lcd_init(20); //KHOI TAO LCD 20 DONG
lcd_clear(); // XOA LCD
_lcd_ready(); // CHO LCD READY
for (i=0;i< strlen(don);i++) // XUAT CHUOI " ---ABCD--" RA lcd;
{
lcd_putchar(don[i]);
};
lcd_gotoxy(0,1); // CHUYEN CON TRO LCD XUONG DONG 2;
for (i=0;i< strlen(don1);i++) // XUAT CHUOI " GIAO TIEP DS1990A" ;
{
lcd_putchar(don1[i]);
};
lcd_gotoxy(0,2); // CHUYEN CON TRO LCD XUONG DONG 3;
for (i=0;i< strlen(don5);i++) // XUAT CHUOI "ATMEGA32 " ;
{
lcd_putchar(don5[i]);
};
while (1)
{ w1_init(); // KHOI TAO W1
devices=w1_search(SEARCH_ROM,&rom_code[0][0]);//TIM THIET BI KET NOI VOI BUS
string[1]= rom_code[0][1]; // DOC MA SERIAL NUMBER
string[2]= rom_code[0][2];
string[3]= rom_code[0][3];
if (devices)
{ // SO SANH NEU DUNG MA LA "123456" THI CHO PHEP
if (string[1]== 0x56 &&string[2]== 0x34 && string[3]== 0x12)
{
lcd_gotoxy(0,3); // CHUYEN CON TRO LCD XUONG DONG 3;
for (i=0;i< strlen(don2);i++) // XUAT CHUOI "TRUY XUAT THANH CONG";
{
lcd_putchar(don2[i]);
PIND.0=1; // CHO PHEP DONG CO CHAY
};
}
else {
lcd_gotoxy(0,3); // CHUYEN CON TRO LCD XUONG DONG 3;
for (i=0;i< strlen(don3);i++) // XUAT CHUOI "MA SO KHONG DUNG";
{
lcd_putchar(don3[i]);
PIND.0=0; // DONG CO DUNG
} ;
} ;
}
else {
lcd_gotoxy(0,3); // CHUYEN CON TRO LCD XUONG DONG 3;
for (i=0;i< strlen(don4);i++) //" HAY KET NOI DS1990A ";
{
lcd_putchar(don4[i]);
};
};
};}Last edited by electrics; 06-04-2011, 16:38.Sống trong đời sống cần có một tấm lòng..
Comment
-
các sư huynh đệ! có tài liệu về mega 32 bằng tv ko? up lên cho m xem với. m đang làm đồ án về chip này kết hợp với bàn phím máy tính để chạy chữ.mà cho m hỏi luôn sao: if { }; , while { };.. sao lại có dấu ";" ở cuối vây. nếu bỏ nó đi thi nhiu khi sẽ báo lỗi.thank!
Comment
-
Nguyên văn bởi anhxtanh3087 Xem bài viếtBây giờ thì lập trình trên AVR k khác j lập trình cho máy tính.Lưu ý là để định nghĩa 1 chân là đầu vào bạn định nghĩa như sau: VD
định nghĩa 1 chân là đầu ra:web:
tel : 0903728070
Bán cáp lập trình S7-200 : 250.000 đ/sợi ( cổng com )
Bán cáp lập trình Mishu : 200.000 đ/sợi
Bảo hành 01 năm.
Comment
-
Mình thấy trên forum các cao thủ hay khuyên lập bảng rồi tra giá trị trong CAVR, nhưng mình chưa hình dung ra các lập trình đó. có bạn nào biết rõ về cách lập trình trên xin hướng dẫn mình với. thông cảm nhé vì trình độ mình tự học là chính
thân|
Comment
-
Nguyên văn bởi thang9x_hp Xem bài viếtMình mới vào nghề mong mọi người chỉ giáo bài này ! mình muốn xin code mong mọi người chỉ giùm !
- Cho ngắt ngoài cạnh lên, dùng 1 biến đếm để xác định lần xảy ra ngắt.
- Khi xảy ra ngắt này thì chạy 1 timer, cài lại: cho ngắt ngoài cạnh xuống
- Khi xảy ra ngắt lần nữa thì dừng timer (sẽ tính được độ rộng xung), cài lại: cho ngắt ngoài cạnh lên trở lại, chạy timer lại
- Khi xảy ra ngắt lần nữa thì dừng timer (sẽ cộng dồn để tính chu kì xung), xoá biến đếm
Nếu độ rộng xung và chu kì quá nhỏ thì phải cộng thêm thời gian thực hiện các lệnh trong hàm ngắt để giảm sai số
Trhợp dùng 8051 cũng được, khi đó trong hàm ngắt ngoài lần 1 sẽ phải dùng vòng lặp và biến đếm để kiểm tra chờ chân ngắt ngoài xuống thấp!e
Comment
-
Nguyên văn bởi bluetooth201 Xem bài viếtMình mới tập tành môn này nên đọc vào cung chưa hiểu được gì nhiều. Hi vong các cao thủ ra tay làm một cái tutorial cho đàn em newbie học hỏi ạ. Chân thành cảm ơn!Never forget who you are!
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Hàn chì thiếc lên nhôm.bởi bqvietChắc chắn không ai phủ nhận công sức của bác VVP, mà chỉ cần thời gian để hiểu, hiểu rồi thì sẽ thấm. Chuyện đó không nhanh trong vòng vài giờ đồng hồ được. Hóa học vốn không đơn giản, nhất là khi các phản ứng đề cập trên...
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 20:45 -
-
Trả lời cho Hàn chì thiếc lên nhôm.bởi vi van phamNhiều người vào xem rồi lẳng lặng bỏ đi. Bài viết của tôi, mà không, phải nói là công sức của tôi đã bị phủ nhận. Mình sai ở đâu? Buồn.
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 20:19 -
-
Trả lời cho Hàn chì thiếc lên nhôm.bởi vi van phamĐể hàn nhôm các bạn cần chuẩn bị:
1- Sufat đồng CuSo4 pha thêm vài giot acit sulfuric, chứa vào chai nước muối sinh lý rửa mũi, mắt.
2- Cồn 90 độ, cũng chứa vào chai nước muối sinh lý.
B1- Trước tiên các bạn nhỏ lên vị...-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 14:04 -
-
Trả lời cho Hàn chì thiếc lên nhôm.bởi vi van phamTrước tiên giúp các bạn hiểu rõ vấn đề, tôi giải thích hiện tượng vật lý trên video:
Lớp Cu sau khi mạ quá tệ do Cu bám trên Fe, thầy giáo đã đốt Cu thành CuO (oxid đồng) đồng thời Fe ( cây đinh) thành Fe2o3. Như vậy lớp CuO...-
Channel: Tâm tình dân kỹ thuật
05-03-2025, 23:42 -
-
Trả lời cho Hàn chì thiếc lên nhôm.bởi mèomướpDạ cháu cũng xin phép dơ tay like ạ. Vậy là được 3 người rồi ạ, chờ thêm 1 người nữa để thành trên 3 ạ...
-
Channel: Tâm tình dân kỹ thuật
05-03-2025, 20:25 -
-
Trả lời cho Hàn chì thiếc lên nhôm.bởi bqvietBqv dơ tay đồng thuận, dù rằng đã mua loại flux trợ hàn thiếc chuyên dụng rồi. Có thêm một cách khác để hàn nhôm để dắt lưng dự phòng cũng hay.
-
Channel: Tâm tình dân kỹ thuật
05-03-2025, 15:17 -
-
Trả lời cho Hàn chì thiếc lên nhôm.bởi dinhthuong80Cháu đang chờ thêm 2like nữa để xem bác chia sẻ ạ!
Đã xem clip bác giới thiệu!
Cảm ơn bác chia sẻ kinh nghiệm cho thợ điện tử....-
Channel: Tâm tình dân kỹ thuật
05-03-2025, 10:45 -
-
Trả lời cho Hàn chì thiếc lên nhôm.bởi vi van phamCác bạn xem video này, cách mạ đồng lên sắt và inox chắc chắn, không bong tróc của 1 thầy giáo dạy Hóa ( Video chỉ nói mạ lên sắt, inox mà thôi), không giảng dạy lý thuyết phản ứng. https://www.youtube.com/watch?v=gVtN...h%E1%BB%8DcABC
-
Channel: Tâm tình dân kỹ thuật
05-03-2025, 07:56 -
-
bởi vi van phamHàn chì thiếc lên dây điện nhôm luôn là sự khó khăn của anh em thợ. Dung dịch trợ hàn nhôm quãng cáo mua về chỉ hàn được sắt và inox. Tôi tìm thấy trên mạng người ta dùng sulfat đồng CuSo4 mạ đồng lên nhôm rồi hàn. Cách này không dùng...
-
Channel: Tâm tình dân kỹ thuật
04-03-2025, 20:04 -
-
Trả lời cho Biết gì nói nấy, cãi chửi thoải máibởi nguyendinhvanNó là di chứng của cái bệnh thành tích, hình thức. Nếu không chữa trị đúng thày đúng thuốc thì sau này dễ biến chứng thành căn bệnh ảo.
Dẫu sao thì khoa học kỹ thuật công nghệ cũnc· cần kết hợp với cúng lễ ạ.
Cầu Thiên...-
Channel: Tâm tình dân kỹ thuật
03-03-2025, 22:15 -
Comment