Попробовал написать программу для генерации синусоидального напряжения.
.include "m128def.inc"
.def index_1 = R8
.def index_2 = R9
.def index_3 = R10
RJMP VECT_END
;***** ВЕКТАРА ПРЕРЫВАНИЯ ТАЙМЕРА-СЧЕТЧИКА Т3
RJMP VECT_END
.ORG OC3Aaddr ;Вектор прерывания таймера T1 при совпадении (КАНАЛ А)
RJMP SINOUTA
.ORG OC3Baddr ;Вектор прерывания таймера T1 при совпадении (КАНАЛ B)
RJMP SINOUTB
.ORG OC3Caddr ;Вектор прерывания таймера T1 при совпадении (КАНАЛ C)
RJMP SINOUTC
VECT_END:
;***** ИНИЦИАЛИЗАЦИЯ СТЕКА
LDI r19,HIGH(RamEnd)
OUT SPH,r19
LDI r19,LOW(RamEnd)
OUT SPL,r19
LDI R16,100
MOV R14,R16
CLR R11
;НАСТРОЙКА ПРЕРЫВАНИЯ
LDI R18, 0b00000000
STS TIMSK,R18
LDI R25, (1<<OCIE3A) | (1<<OCIE3B) | (1<<OCIE3C)
STS ETIMSK,R25
SEI
;НАСТРОЙКА OCR
CLR R15
STS OCR3AH, R15 ;в регистр совпадений таймера T1
LDI R16,135
STS OCR3AL, R16 ;в регистр совпадений таймера T1
INC R8
STS OCR3BH, R15 ;в регистр совпадений таймера T1
LDI R16,233
STS OCR3BL, R16 ;в регистр совпадений таймера T1
INC R9
STS OCR3CH, R15 ;в регистр совпадений таймера T1
LDI R16,14
STS OCR3CL, R16 ;в регистр совпадений таймера T1
INC R10
;TCCR НАСТРОИМ НА 8-БИТЫЙ БЫСТРЫЙ ШИМ ПРЕДЕЛИТЕЛЬ 8
LDI R16,(1<<COM3A1) | (1<<COM3B1) | (1<<COM3C1) | (1<<WGM30)
STS TCCR3A,R16
LDI R17,(1<<CS31) | (1<<WGM32)
STS TCCR3B,R17
LOOP:
RJMP LOOP
SINOUTA:
LDI ZL,LOW(MAS1*2)
LDI ZH,HIGH(MAS1*2)
ADD ZL,index_1
ADC ZH,R11
LPM
INC index_1
STS OCR3AH, R15
STS OCR3AL, R0
CP index_1, R14
BREQ POWT1
RETI
POWT1:
CLR index_1
RETI
SINOUTB:
LDI ZL,LOW(MAS2*2)
LDI ZH,HIGH(MAS2*2)
ADD ZL,index_2
ADC ZH,R11
LPM
INC index_2
STS OCR3BH, R15
STS OCR3BL, R0
CP index_2, R14
BREQ POWT1
RETI
POWT2:
CLR index_2
RETI
SINOUTC:
LDI ZL,LOW(MAS3*2)
LDI ZH,HIGH(MAS3*2)
ADD ZL,index_3
ADC ZH,R11
LPM
INC index_3
STS OCR3CH, R15
STS OCR3CL, R0
CP index_3,R14
BREQ POWT3
RETI
POWT3:
CLR index_3
RETI
MAS1:
.DB 135, 143, 151, 159, 167, 174, 182, 189, 196, 202, 208, 214, 220, 225, 230, 235, 239, 242, 246, 248
.DB 251, 252, 253, 254, 255, 254, 253, 252, 251, 248, 246, 242, 239, 235, 230, 225, 220, 214, 208, 202
.DB 196, 189, 182, 174, 167, 159, 151, 143, 135, 127, 120, 112, 104, 96, 88, 81, 73, 66, 59, 53
.DB 47, 41, 35, 30, 2, 1,1,1, 2, 3, 4, 7, 9, 13, 16, 20, 25, 30, 35, 41
.DB 47, 53, 59, 66, 73, 81, 88, 96, 104, 112, 120, 128
MAS2:
.DB 233, 229, 224, 218, 212, 206, 200, 193, 186, 179, 172, 164, 157, 149, 141, 133, 125, 117,109, 101
.DB 93, 86, 78, 71, 64, 57, 51, 45, 39, 33, 28, 23, 19, 15, 11, 8, 6, 4, 2, 1
.DB 1, 1, 1, 2, 3, 5, 8, 10, 14, 18, 22, 26, 31, 37, 43, 49, 55, 62, 69, 76
.DB 83, 91, 98, 106, 114, 122, 130, 138, 146, 154, 162, 169, 177, 184, 191, 198, 204, 227, 232, 236
.DB 240, 244, 247, 249, 257, 253, 254, 254, 254, 254, 253, 252, 250, 247, 245, 241, 237
MAS3:
.DB 14, 10, 8, 5, 3, 2, 1, 1, 1, 1, 2, 4, 6, 8, 11, 15, 19, 23, 28, 33
.DB 39, 45, 51, 57, 64, 71, 78, 86, 93, 101, 109, 117, 125, 133, 141, 149, 157, 164, 172, 179
.DB 186, 193, 200, 206, 212, 218, 224, 229, 233, 237, 241, 245, 247, 250, 252, 253, 254, 254, 254, 254
.DB 253, 251, 249, 247, 244, 240, 236, 232, 227, 222, 216, 216, 204, 198, 191, 184, 177, 169, 162, 154
.DB 146, 138, 130, 122, 114, 106, 98, 91, 83, 73, 69, 62, 55, 49, 43, 37, 31, 26, 22, 18
При симуляции в proteus какойто глюк: когда подключаю осциллограф к порту он перестает работать.
Как же проверить получится синус или нет?
Социальные закладки