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ỏi về bơm màng bldcbởi nhathung1101Thì đây là 4r điên nặng điện mà, nên họ show phần điện thôi. Phần "cốt lõi" có cái tay biên chắc sang Văn Môn rồi....
-
Channel: Điện tử dành cho người mới bắt đầu
30-11-2024, 18:54 -
-
Trả lời cho Chọn dây dẫn cho điện DC?bởi nhathung1101Điện DC đương nhiên là khác với AC rồi. Chỉ cần biết mặt chữ là thấy khác như gà trống với gà mái mà.
Còn về bản chất, AC là dòng điện hoạt động theo tần số. Tần số càng cao thì dây dẫn càng mỏng, nhẹ, vì hiệu ứng...-
Channel: Điện tử dành cho người mới bắt đầu
30-11-2024, 18:46 -
-
Trả lời cho Công thức điện tửbởi nhathung1101Ăn ít => Nói nhiều.
Nói nhiều => Làm ít.
Làm ít => Vợ mắng.
Vợ mắng => Cáu nhiều.
Cáu nhiều => Ngủ ít.
Ngủ ít => Râu nhiều.
Râu nhiều =>...-
Channel: Tâm tình dân kỹ thuật
30-11-2024, 18:39 -
-
Trả lời cho Chọn dây dẫn cho điện DC?bởi mèomướpDạ vài chục mét thì chú tính như vậy được ạ. Chứ chuẩn thì phải tính cả điện trở của toàn bộ chiều dài dây dẫn nhân với dòng điện xem sụt áp có trong khoảng chấp nhận đc hông ạ. Trong mạch điện tử khoảng cách ngắn và mạch...
-
Channel: Điện tử dành cho người mới bắt đầu
30-11-2024, 14:49 -
-
bởi vietroadTheo mình biết thì chọn dây dẫn dựa vào dòng tải. Thường thì tiết diện 1mm2 cho dòng 6A. Nhưng trong các mạch điện tử, như mạch nguồn tổ ong chẳng hạn, dòng đến vài chục Ampe mà đường mạch mỏng dính. Phải chăng điện DC nó khác với...
-
Channel: Điện tử dành cho người mới bắt đầu
30-11-2024, 14:19 -
-
Trả lời cho Hỏi về bơm màng bldcbởi vi van phamPhải xem cơ cấu bơm, chứ xem cơ cấu rotor, thì chỉ làm thầy bói xem voi.
-
Channel: Điện tử dành cho người mới bắt đầu
29-11-2024, 08:19 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11vg, cám ơn bác...........
-
Channel: Thiết bị điện tử cá nhân
28-11-2024, 14:37 -
-
bởi khoine9899
Em chào các anh và mọi người.
Hiện em đang có 1 con bơm màng trong thiết bị y tế đang gặp tình trạng yếu dần hoặc ngừng hoạt động sau thời gian sử dụng
Sau khi tìm hiểu về thông tin của bơm trên mạng thì em được biết...-
Channel: Điện tử dành cho người mới bắt đầu
28-11-2024, 11:22 -
-
Trả lời cho Cần mọi người giúp mạch tạo sóng siêu âm máy rửabởi bqviet
-
Channel: Điện tử công suất
27-11-2024, 20:26 -
-
bởi Minhdai95Em chào mọi người, e đang sửa mạch tạo sóng siêu âm cho máy rửa mà chưa có tài liệu để tham khảo sửa, mọi người cho e xin tài liệu ạ...
-
Channel: Điện tử công suất
27-11-2024, 11:37 -
Comment