rem Main.bas file generated by New Project wizard
rem Created: 周五 8月 30 2019 TAOTIE
rem Processor: ATmega16
rem Compiler: BASCOM-AVR
rem BASCOM-AVR版调光程序由Proteus 8 .8 中 Arduino Dimming 230V AC例程修改而来
rem 示波器观察220V交流波形与同步过零信号交叉位置。触发可控硅信号时上升沿的位置
$regfile = "m16def.dat"
$crystal = 8000000
'**********************安排变量*******************************
DIM us_Zhi AS Word '微秒值变量
DIM i as Byte '循环计数变量
DIM beilv as Byte '调光倍率变量(0-128)0 = ON,128= OFF
beilv = 128
'*******************端口初始化*********************************************************************
DDrd.2 = 0 'pd2脚为输入(I NT0过零同步信号输入端)
Pind.2 = 1 ' pd2脚上拉电阻有效
DDrA.3 = 1 ' 将pa3引脚设置为输出(触发控制交流负载 端)
PortA.3=1 '将pa3引脚设置为高电平
'******************外部I NT0过零同步信号中断设置*******************************************************************************
Config Int0 = rising '外部中断 Low Level低 rising 上 falling下
On Int0 guo_0_zd ' 过零中断服务入口
Enable Interrupts '使能全局中断
Enable Int0 '使能外部I NT0过零中断
'**********触发角控制倍率循环计数***********************************
do
for i = 1 to 128 Step 1
i=i+1
beilv=i
Waitms 10
Next i
i = 1
loop
'***************外部中断过零服务子程序******************
guo_0_zd:
us_Zhi = 75*beilv
Waitus us_Zhi '高版本2078就是好,延迟时间值可以是变量
PortA.3=1
Waitus 10
PortA.3=0
Return
'触发角计算:1个完整的50Hz波= 1/50 = 20ms
'每次零交叉:(50Hz) - > 10ms(1/2周期)
'对于60Hz => 8.33ms(10.000 / 120)
'10ms = 10000us
'(10000us - 10us)/ 128 = 75(大约)60Hz => 65