ВОООООТ ОНА МОЯ ЛЮБИМАЯ ЖЕНЩИНА!!!
10-11-2009 22:28
к комментариям - к полной версии
- понравилось!
я тут понял что когда с девушками дружишь то вроде хорошие и милые люди, а как только встречаться начинаешь, то сразу начинает трахать мозг, сниться во сне и много времени проводишь с ней. так вот я понял что курсач это тоже самое, пока получил задание вроде как довольно неплохо и мило) как только начинаешь заниматься им пристально то уже ни о чем думать не можешь, он тебе жутко трахает мозг да еще и капризничает и во сне сниться. так вот : ВОТ МОЯ ЛЮБИМАЯ ЖЕНЩИНА!!! тут представлен программный код моего курсача.
задача такая: спроектировать микропроцессорное устройство выполняющее работу с 10ти разрдяным 8ми канальным ацп, выполняющие следующие функции: циклический или выборочный опрос каналов выбирается на клавиатуре, подключенной к нему. чтение ацп программное. Данные 1ого и 8ого каналов сравнить, если значение первого канала больше либо равно восьмому, то передать через последовательный порт со скоростью 9600кб\с, а иначе передать через параллельный порт в режиме асинхронного обмена. вооооот! только что сделал радости нету предела))) пусть код не оптимальный но работает)))
выбрал я микропроцессор AVR AT90S8535
; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************
.include "D:\VMLAB\include\8535def.inc"
;.XkeyPad KEY4X4 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7
; Define here the variables
;
.def temp =r16
.def channel =r20
; Define here Reset and interrupt vectors, if any
;
;XkeyPad KEY4X4 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7
reset:
rjmp start
reti ; Addr $01
reti ; Addr $02
reti ; Addr $03
reti ; Addr $04
reti ; Addr $05
reti ; Addr $06 Use 'rjmp myVector'
reti ; Addr $07 to define a interrupt vector
reti ; Addr $08
reti ; Addr $09
reti ; Addr $0A
reti ; Addr $0B This is just an example
reti ; Addr $0C Not all MCUs have the same
reti ; Addr $0D
; number of interrupt vectors
reti ; Addr $0E
reti ; Addr $0F
reti ; Addr $10
; Program starts here after Reset
;
start:
ldi r16, high(Ramend)
out SPH,r16
ldi r16, low(Ramend)
out SPL,r16
; rcall Init_uart
; ldi r20,$60
;ldi r21,00
ldi xl,$60;начало массива.результат работы ацп для одиночного
ldi xh,00
ldi yl,$60;адрес измерения первого канала
ldi yh,00
ldi zl,$6E ;адрес измерения восьмого канала
ldi zh,0
sei
; rcall Send16Uart
nop ; Initialize here ports, stack pointer,
nop ; cleanup RAM, etc.
nop ;
nop ;
; rcall SingleADC
SelectOpros:
rcall scanCode
dec r19
cpi r19,9
brcc SelectOpros
cpi r19,8
brcc CycADC
rcall SingleADC
rjmp nextToCompare
CycADC:
rcall CyclingADC
nextToCompare:
rcall Compare
sbrS r16,0
rjmp SendUart
rjmp PrtB
sendUart:
rcall Send16Uart
rjmp forever
PrtB:
rcall sendPortB
nop
nop
nop
nop
; ldi r16,$0FF
; out PortD, r16
forever:
nop
nop ; Infinite loop.
nop ; Define your main system
nop ; behaviour here
rjmp forever
sendPortB:
ldi r17,16
ldi r16,$0FF
out ddrB, r16
esheByte:
sbi ddrD,6
sbi portD,6
ld r18,y+
out portB, r18
WaitTransmit:
sbic portD,6
rjmp WaitTransmit
dec r17
brne EsheByte
ret
compare:
ld r16,y+
ld r17,y
ld r18,z+
ld r19,z
cpse r16,r18
rjmp dalshesravn
rjmp sravnLowByte
dalshesravn:
cp r16,r18
brcc PerviiBolshe
Ser r16;1<8
sravnLowByte:
cp r17,r19
brcc PerviiBolshe
ser r16
rjmp GoEnd
PerviiBolshe:
clr r16;1>8
Goend:
dec yl
ret
;опрос клавиатуры, возвращает в R19 номер клавиши, начиная с 1 до 16
scanCode:
sec
push r16;регистр сдвига
push r17;счетчик сдвига
ldi r18,1
ldi r21,$0FE
;rjmp changeLine
mov r20,r21
mov r19,r18
mk1:
ldi r17,4
Ldi r16,$0FE
ldi r18,1
ldi r21,$0FE
ldi r22,0
mk2:
rcall changeLine
nop
nop
nop
SbiS PinC, 4
rjmp Line1
SbiS PinC, 5
rjmp Line2
SbiS PinC, 6
rjmp Line3
SbiS PinC, 7
rjmp Line4
sec
Rol r21
clc
rol r18
inc r22
;ldi r18,$0F
;AND r16,R18
dec r17
brne mk2
rjmp mk1
line1:
clr r19
lsl r22
lsl r22
ldi r19,1
add r19,r22
rjmp ext
line2:
clr r19
lsl r22
lsl r22
ldi r19,2
add r19,r22
rjmp ext
line3:
clr r19
lsl r22
lsl r22
ldi r19,3
add r19,r22
rjmp ext
line4:
clr r19
lsl r22
lsl r22
ldi r19,4
add r19,r22
rjmp ext
ext:
pop r17
pop r16
ret
changeLine:
mov r20,r21
mov r19,r18
ldi r16,255
out ddrc,r16
;ldi r20,$0FE
out PortC,r20
;ldi r19,0b00000001
out DDRC,R19
ldi r16,0
out POrtC,r16
ret
SingleADC:
ldi r17,8
mov channel,r19 ;выбор канала
cycle:
rcall InitSingleADC
dec r17
brne cycle
ret
CyclingADC:
push r16
ldi r18,8;Опрос 8ми каналов
ldi channel,0
nextChannel:
rcall InitSingleADC
inc channel
;ldi r16,0
;out ADCSR,r16
dec r18
brne NextChannel
pop r16
ret
Init_uart:
ldi r20,0b00011101 ;Инициализация UART out UCR,tmp ;TXEN=1,RXEN=1,СРH9=1,TXB8=1
out UCR,r20
ldi r20,25 ;9600 бит/c при fclk=4МГц
out UBRR,r20
ret
Send16Uart:
rcall init_uart
push r17
ldi r17,16
m2:
sbis USR,5
rjmp m2
ld r16,y+
out UDR,R16
m1: sbis USR,6
rjmp m1
cbi USR,6
dec r17
brne m2
pop r17
ret
InitSingleADC:
push r16
CLR r16
ldi r16,0b00000000
add r16, channel
;dec r16
;выбор канала
out ADMUX,r16
ldi r16,0b11000101
out ADCSR,r16
wait:sbis ADCSR,4
rjmp wait
in r16,ADCH
st x+,r16
in r16,ADCL
st x+,r16
pop r16
ret
вверх^
к полной версии
понравилось!
в evernote