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
-
Bạn chắc là Codevision của bạn có lỗi không..Tại vì mình thử copy code của bạn sau đó mình sữa lại như trên không thấy có lỗi j hết..bạn có 2 lỗi và 3 cái warning, mấy cái warning k quan tâm, cái lỗi C141 C135 là lỗi cú pháp thôi bạn quên dấu ";" đằng sau đó.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
-
Cám ơn bạn , tui biết lỗi của chương trình của mình rồiNguyê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
-
Cái này dùng 1 con AVR(mega/tiny)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
-
cái này phải học C trước, nắm các câu lệnh cơ bản trước, khi đã nắm chắc rồi thì phần còn lại là phần cứng của vi điều khiển thôi, cách khởi tạo phần cứng của nó... phần này có trong DATA SHEET của nhà sản xuất rồi bạn nên download bản full về sẽ rất chi tiết. trong phần help của codevisionavr cũng có đấy. nếu mới bắt đầu thì nên học điều khiển LED trước, điều khiển sáng tắt 1 con led rồi đến điều khiển cả 8 con tương ứng với 1 thanh ghi( với vi điều khiển 8 bit)... sau đó đến các chuẩn giao tiếp của nó...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
-
bởi theidiotcatAMD Ryzen 9 9950X3D không chỉ là một bộ vi xử lý đơn thuần; nó là lời khẳng định về sức mạnh của kiến trúc Zen 5 kết hợp cùng công nghệ 3D V-Cache đột phá. Trong bối cảnh thị trường linh kiện PC cạnh tranh khốc liệt, đây được xem...
-
Channel: Đánh giá sản phẩm DTVN
Hôm qua, 09:21 -
-
bởi theidiotcatBộ đôi Ryzen 9 9950X3D2 và Radeon RX 9070 XT 16GB là sự kết hợp phần cứng cao cấp nhất của AMD hiện nay. Đây không chỉ là một dàn máy tính để giải trí thông thường, mà là công cụ làm việc mạnh mẽ dành cho những ai có nhu cầu xử lý cường...
-
Channel: Đánh giá sản phẩm DTVN
Hôm qua, 09:09 -
-
bởi theidiotcatKhi ráp một bộ máy tính cấu hình cao, việc cân đối ngân sách cho từng linh kiện là rất quan trọng. Sự kết hợp giữa vi xử lý AMD Ryzen thế hệ mới có công nghệ 3D V-Cache và card đồ họa Radeon RX 9070 XT đang là lựa chọn rất đáng tiền....
-
Channel: Đánh giá sản phẩm DTVN
11-06-2026, 10:43 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Giới thiệu bản nhạc đệm mới nhộn nhịp tươi vui, nghe là muốn... xuất gia đi tu liền!!!!😁...
-
Channel: Tâm tình dân kỹ thuật
11-06-2026, 09:51 -
-
Trả lời cho Máy đo khuôn mẫubởi vi van phamQuá dễ, Mua cái máy xq quét tòan thân, lấy bàn và khung di chuyển. Tháo đầu xquang ra bán ve chai, mua cái máy siêu âm gắn vào vị trí đầu đèn. Setup máy là chạy chính xác, còn file Setup thì chưa nghĩ ra....
-
Channel: Đo lường và điều khiển dùng máy tính
07-06-2026, 08:49 -
-
Trả lời cho Máy Phun sương tạo ầm Trung Quốc.bởi nguyendinhvanMạch tạo sương là tự dao động.
Mach 555 là đóng mở chu kỳ tần số thấp.
IC 555 giá rẻ, chỉ chạy lên tần số vài trăm ki lô hẹc thôi. Thăng cao hơn là méo dạng rồi tịt.
Mach sương thì dao động tần số tầm 2 mê ga hẹc cơ !...-
Channel: Tâm tình dân kỹ thuật
07-06-2026, 00:09 -
-
bởi nguyendinhvan
Cái máy đo này mắc tiền quá !
Anh em dtvn có giải pháp nào tự chế được không ?...-
Channel: Đo lường và điều khiển dùng máy tính
07-06-2026, 00:00 -
-
bởi nguyendinhvanOi giời.
Thơi buổi PLC rồi, cậu còn hỏi mấy thứ cổ lỗ sĩ này nữa.-
Channel: Tâm tình dân kỹ thuật
06-06-2026, 22:59 -
-
bởi nguyendinhvanChuyện này cũ rồi.
Họ trả lương cho CN, sau đó lại bán hàng thu tiền về. Họ còn cấp các dịch vụ như chỗ ăn ở, quán cafe , giải trí, phương tiện giao thông. Mục đích là thu tối đa số tiền đã chi trả.
Hàng hóa sx ra, chuyển...-
Channel: Tìm mua
06-06-2026, 22:56 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi vi van phambao nhiêu năm quên bẳng đi, là mình còn có 1 chút xíu nghệ thuật bài bản, đã dạy cho con cháu chơi đàn, dù bố mẹ và chúng không xem là quan trọng. Hôm qua ngày bế mạc lớp lá, bỗng dưng thằng cháu ngoại thấy con bé được sơ giới thiệu...
-
Channel: Tâm tình dân kỹ thuật
06-06-2026, 21:58 -
xem lại nhè
Comment