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
-
bởi shbetlegalvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
-
Channel: Hướng dẫn sử dụng diễn đàn
hôm nay, 15:10 -
-
bởi shbetlegaluuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu uuuu
-
Channel: Quảng cáo
hôm nay, 15:03 -
-
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
hôm nay, 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
Hôm qua, 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
Hôm qua, 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 -
-
bởi pia2k1Cùng câu hỏi và cần được giải đáp thêm ạ...
-
Channel: Hướng dẫn sử dụng diễn đàn
27-11-2024, 11:28 -
-
Trả lời cho Công thức điện tửbởi mèomướpDạ thời thế giờ thay đổi theo hướng tích cực hơn rồi chú trung sĩ ạ. Kiến thức được chia sẻ ngày càng nhìu nên làm ăn gian dối ko còn dễ dàng như trước đâu ạ. Những thợ nhỏ rồi sẽ thành công nhân sản xuất đồ mới hết thay vì sửa chữa lặt vặt...
-
Channel: Tâm tình dân kỹ thuật
26-11-2024, 21:21 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi mèomướpDạ cùng chuẩn tín hiệu thì chắc chắn là nhận ạ. Vì bản chất oled hay lcd thì đều phải có mạch chuyển đổi trên thanh gỗ rồi chuyển sang những chip xử lý hàng nghìn chân gắn trên những tab mỏng dính rồi mới ra các điểm ảnh theo hàng...
-
Channel: Thiết bị điện tử cá nhân
26-11-2024, 20:31 -
Comment