Chào các bạn! Truyen4U chính thức đã quay trở lại rồi đây!^^. Mong các bạn tiếp tục ủng hộ truy cập tên miền Truyen4U.Com này nhé! Mãi yêu... ♥

RS232

Tóm tắt:Qua bài này các bạn có thể gửi và nhận các kí tự lên máy tính từ avr .Sử dụng phần Terminal của codevision.

Giới thiệu :

Chuẩn giao tiếp RS232

Ghép nối qua cổng nối tiếp RS-232 là một trong những kỹ thuật được sử dụng rộng rãi nhất để ghép nối các thiết bị ngoại vi với máy tính. Qua cổng nối tiếp có thể ghép nối chuột, modem, thậm chí cả máy in, bộ biến đổi AD, các thiết bị đo lường .

Việc truyền dữ liệu xẩy ra trên 2 đường dẫn qua chân cắm ra TxD, gửi dữ liệu của nó đến thiết bị khác. trong khi đó dữ liệu mà máy tính nhận được dẫn đến chân RxD. các tín hiệu khác đóng vai trò như tín hiệu hỗ trợ khi trao đổi thông tin và vì thế không phải trong mọi ứng dụng đều dùng đến.

Mức tín hiệu trên chân ra RxD tùy thuộc vào đường dẫn TxD và thông tin thường nằm trong khoảng - 12V.. + 12V các bit dữ liệu được đảo ngược lại. Mức điện áp ở mức cao nằm trong khoảng - 3V và - 12V và mức thấp nằm trong khoảng từ + 3Vvà +12V . Trạng thái tĩnh trên đường dẫn có mức điện áp - 12V.

Lập trình truyền thông nối tiếp trên Atmega16

Atmega16 hỗ trợ rất tốt cho truyền thông nối tiếp USART. Các đặc điểm nổi bật là:

- Hoạt động toàn phần Full-duplex.

- Hỗ trợ cả hoạt động đồng bộ và không đồng bộ.

- Định dạng khung có thể lập trình (với 5,6,7,8 hoặc 9 Data bits và 1 hoặc 2 Stop Bits), tự dò lỗi định dạng khung và lỗi Data Over Run.

- Hỗ trợ truyền thông điều khiển ngắt.

- Hỗ trợ truyền thông đa xử lý.

Các đặc điểm của Bộ thu (Receiver):

- Dò trạng thái rỗi của đường truyền.

- Dò lỗi khung, nhiễu, và lỗi overrun.

- Báo trạng thái thanh ghi dữ liệu của bộ thu đầy.

Các đặc điểm của bộ phát (Transmitter) :

- Báo trạng thái thanh ghi dữ liệu bộ phát rỗng.

- Báo hoàn thành quá trình truyền.

- Ngắt quá trình truyền.

- Phát trạng thái rỗi lên đường truyền.

Cách thiết lập Terminal trên codevision

vào Tool/Terminal ta có :

Sau khi thiết lập như trên vđk và PC giống nhau về tốc độ và khung truyền .

khi giao tiếp ta click vào biểu tượng hình máy tính :

Xét chế độ cho VĐK :

// CHE DO KO DONG BO ,8 BIT , 1 BIT STOP ,U2X=0,ko dung parity

UCSRA=0x00;

UCSRB=0x90; //E ngat nhan va E cho nhan

UCSRC=0x86; // che do

UBRRH=0x00;

UBRRL=0x33; // baud =9600 of 8Mhz tan so thach anh

Thanh ghi điều khiển và trạng thái A (UCSRA).

- Bit 7 - RXC: USART Receive Complete. Bit này được set khi có dữ liệu không đọc được vào bộ đệm nhận, hay bộ đệm nhận đã đầy và nó bị xoá khi bộ đệm nhận là rỗng. Cờ RXC có thể sử dụng để phát ra một ngắt báo Receive Complete.

- Bit 6 - TXC: USART Transmit Complete: Bit này được set nếu quá trình truyền hoàn thành, đó là tại lúc kết thúc một khung gửi đi. Cờ TXC có thể dùng phát ra một ngắt Transmit Complete.

- Bit 5 - UDRE: USART Data Register Empty. Bit này được set nếu thanh ghi dữ liệu phát (bộ đệm truyền) là rỗng và sẵn sàng nhận dữ liệu mới. Cờ này cũng có thể dùng đẻ phát ra một ngắt.

Thanh ghi điều khiển và trạng thái B (UCSRB)

- Cho phép ngắt .

Thanh ghi điều khiển và trạng thái C (UCSRC).

- Bit 7 - URSEL: Register Select. Bit này chọn việc truy nhập vào UCSRC hoặc UBRRH. Nếu URSEL = 1 thì sẽ chọn làm việc với UCSRC, URSEL phải được viết là 1 khi thực hiện viết UCSRC.

- Bit 6 - UMSEL: USART Mode Select. Bít này dùng để chọn giữa chế độ hoạt động đồng bộ (UMSEL = 1) hay không đồng bộ (UMSEL= 0).

- Thanh ghi tốc độ Baud (UBRRL và UBLLH).

- Bit 15 - URSEL: Register Select. URSEL = 0 ( làm việc với UBRRH.

- Bit 14:12 - Reserved Bits. Các bit này dành cho các ứng dụng tương lai.

- Bit 11:0 - UBRR11:0: USART Baud Rate Register. Đây là thanh ghi 12 bit chứa tốc độ baud của USART, UBRRH chứa 4 bit cao nhất và UBBRRL chứa 8 bit thấp còn lại.

VD: Gửi tín hiệu gõ ở terminal , vđk nhận và hiển thị lên LCD

Chú ý :

getchar(); là lệnh nhận giá trị từ chân RX từ PC

putchar(var); gửi var ra chân TX lên PC

/*****************************************************

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 : 1/10/2008

Author :Tuan Le ngoc

Company : BIA++

Comments:

Chip type : ATmega16L

Program type : Application

Clock frequency : 4.000000 MHz

Memory model : Small

External SRAM size : 0

Data Stack size : 256

*****************************************************/

#include <mega16.h>

#include <delay.h>

#include<stdio.h>

// Alphanumeric LCD Module functions

#asm

.equ __lcd_port=0x15 ;PORTC

#endasm

#include <lcd.h>

#define RXB8 1

#define TXB8 0

#define UPE 2

#define OVR 3

#define FE 4

#define UDRE 5

#define RXC 7

#define FRAMING_ERROR (1<<FE)

#define PARITY_ERROR (1<<UPE)

#define DATA_OVERRUN (1<<OVR)

#define DATA_REGISTER_EMPTY (1<<UDRE)

#define RX_COMPLETE (1<<RXC)

unsigned char test;

void init_comm(void )

{

// init che do cong I/O

DDRD.0=0;PORTD.0=1;

DDRD.1=1;

// CHE DO KO DONG BO ,8 BIT , 1 BIT STOP ,U2X=0,ko dung parity

UCSRA=0x00;

UCSRB=0x90; //E ngat nhan va E cho nhan

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x33; // baud =9600 of 8Mhz

}

////////////////////////////////////////////////////

void main(void)

{

s1=1;s2=s3=s4=0;

// Input/Output Ports initialization

// Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTA=0x00;

DDRA=0x01;

// Port B initialization

// Func7=Out Func6=Out Func5=Out Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=1 State6=1 State5=1 State4=P State3=P State2=P State1=P State0=P

PORTB=0x00;

DDRB=0xFF;

// Port C initialization

// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=1 State2=T State1=T State0=T

PORTC=0xFF;

DDRC=0xFF;

// Port D initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=Out Func0=Out

// State7=1 State6=1 State5=1 State4=1 State3=P State2=P State1=1 State0=1

PORTD=0xF3;

DDRD=0xF3;

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: 3.906 kHz

// Mode: Normal top=FFh

// OC0 output: Disconnected

TCCR0=0x00;

TCNT0=0x00;

OCR0=0x00;

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: 3.906 kHz

// Mode: Ph. correct PWM top=00FFh

// OC1A output: Inverted

// OC1B output: Inverted

// Noise Canceler: Off

// Input Capture on Falling Edge

//TCCR1A=0xF1;

//TCCR1B=0x05;

TCCR1A=0x00;

TCCR1B=0x04;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: 15.625 kHz

// Mode: Normal top=FFh

// OC2 output: Disconnected

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

// INT2: Off

MCUCR=0x00;

MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x04;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

//SFIOR&=0x1F;

// LCD module initialization

// Global enable interrupts

//#asm("sei")

// LCD module initialization

lcd_init(16);

init_comm();

while (1)

{

// Place your code here

lcd_gotoxy(0,0);

lcd_putsf("Giao tiep :");

//test=getchar();

//putchar(test);

lcd_gotoxy(12,1);

test=getchar();

lcd_putchar(test);

}

}

Bạn đang đọc truyện trên: Truyen4U.Com

Tags: #saoxathubk