set_ubrr.s

来自「GCC source code for do it yoursel a avr 」· S 代码 · 共 96 行

S
96
字号
//***************************************************************************
//*
//* Title		: Set_UBRR
//* Author		: Andrew Leech
//***************************************************************************
#if #cpu (atmega16).arch atmega16
#elif #cpu (atmega32)
.arch atmega16
#endif

#define __SFR_OFFSET 0
#include <avr/io.h>
//#include <avr/iom16.h>
#include "crystal.h"
#include "memory.h"

.list

//*****************************
//* Global Register Variables *
//*****************************
//New registers used for get_codes (V3.0)

#define	UBRR_IN		 r16	// Device code

	.section .ubrr,#execinstr,#alloc


// Pulse SCK Line

//Initialize UART.
ubrr_set:	
	cpi    	r16,03
	breq	three
	cpi		r16,05
	breq	five
	cpi		r16,07
	breq	seven
	cpi		r16,11
	breq	eleven		//0x0b
	cpi		r16,15
	breq	fifteen		//0x0f
	cpi		r16,23		
	breq	twothree	//0x17
	cpi		r16,31
	breq	threeone	//0x1f
	cpi		r16,47
	breq	fourseven	//0x2f
	cpi		r16,95
	breq	ninefive	//0x5f
//	cpi		r16,191
//	breq	onenineone
	rjmp	load


three:
	ldi		r16,N115200		// set baud rate
	rjmp	load
five:
	ldi		r16,N76800		// set baud rate
	rjmp	load
seven:
	ldi		r16,N57600		// set baud rate
	rjmp	load
eleven:
	ldi		r16,N38400		// set baud rate
	rjmp	load
fifteen:
	ldi		r16,N28800		// set baud rate
	rjmp	load
twothree:
	ldi		r16,N19200		// set baud rate
	rjmp	load
threeone:
	ldi		r16,N14400		// set baud rate
	rjmp	load
fourseven:
	ldi		r16,N9600		// set baud rate
	rjmp	load
ninefive:
	ldi		r16,N4800		// set baud rate
//	rjmp	load
//onenineone:
//	ldi		r16,N2400		// set baud rate

load:	
	out     0x20,r17
	out		0x09,r16

	ret



⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?